一
int a = -10;
printf("%d\n", sizeof a);//這樣寫行不行?
printf("%d\n", sizeof int);//這樣寫行不行?
sizeof a是正確的
sizeof int報錯error0029,sizeof運算子的引數應該是運算式
二
//代碼3-非法運算式
int main()
{
int i = 10;
i = i-- - --i *(i = -3) * i++ + ++i;
printf("i = %d\n", i);
return 0;
}
| 值 | 編譯器 |
|---|---|
| -128 | Tandy 6000 Xenix 3.2 |
| -95 | Think C 5.02(Macintosh) |
| -86 | RM PowerPC AIX 3.2.5 |
| -85 | Sun Sparc cc(K&C編煩) |
| -63 | gcc , HP_UX 9.0 , Power C 2.0.0 |
| 4 | Sun Sparc acc(K&C編譯器) |
| 21 | Turbo C/C++ 4.5 |
| 22 | FreeBSD 2.1 R |
| 30 | Dec Alpha 0SF1 2.0 |
| 36 | Dec VAX/VMS |
| 42 | Microsoft C 5.1 |
i = i-- - --i *(i = -3) * i++ + ++i;
在不同的編譯器中得到的值也不同
三
//代碼4
#include <stdio.h>s
int fun()
{
static int count = 1;
return ++count;
}
int main()
{
int answer;
answer = fun() - fun() * fun();
printf("%d\n", answer);//輸出多少?
return 0;
}
不確定,雖然在大多數的編譯器上求得結果都是相同的,函式的呼叫先后無法確定,
四
//代碼5
#include <stdio.h>
int main()
{
int i = 1;
int ret = (++i) + (++i) + (++i);
printf("%d\n", ret);
printf("%d\n", i);
return 0;
}
Linux: 10 4
visual studio: 12 4
這段代碼中的第—個+執行的時候,第三個++是否執行,這個是不確定的,因為依靠運算子的優先級和結合性是無法決定第一個+和第三個前置++的先后順序,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/249506.html
標籤:其他
