一
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
这段代码中的第—个+执行的时候,第三个++是否执行,这个是不确定的,因为依靠操作符的优先级和结合性是无法决定第一个+和第三个前置++的先后顺序。