一
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
這段代碼中的第—個+執行的時候,第三個++是否執行,這個是不確定的,因爲依靠操作符的優先級和結合性是無法決定第一個+和第三個前置++的先後順序。