首先,感谢楼上的作答,
按照楼上提示我试验了以下代码
#include <stdio.h>
int main()
{
int i = 10;
int j = 20;
int c = i + j;
printf("%d\n",c);
return 0;
}
可是也是可以编译通过的啊!
#include <stdio.h>
int main()
{
int i = 10;
int j = 20;
printf("%d\n",int c = i + j);
return 0;
}
改成这样不论是C还是C++都编译通不过,其实也是废话,我从来没看见过这样的形式。
#include <stdio.h>
int main()
{
int i = 10;
int j = 20;
int c;
printf("%d\n", c = i + j);
return 0;
}
改成这样又都同得过了。我快傻了。
楼上,我水平没有菜到那个地步吧。
只是一直是使用.cpp后缀,也就是C++编译器,
发现在.cpp后缀很容易编译通过的东西,在.c后缀下却完全通不过,
而且更重要的是我的代码是完全符合C99标准的,我也专门翻了下c primer plus 第五版,在那上面我的代码也是没有任何问题的,看样子,我确实还得去查查 C程序设计语言,也许是标准的问题,反正VS2010至今都还有很多C99标准不支持。
不过还是要感谢一下楼上的回帖。
6L和9L明显没怎么写过C程序,哈哈,常写C++程序突然变到C程序就会感觉很不爽,看这种情况:
void foo()
{
int a;
//代码
int i = 0; //完了,这里会报错
//代码
}
这点最让人很不爽,所有的变量声明或者初始化不能夹杂在代码中,我想lz肯定知道这一点,15L也提到了,那么for(int i = 0;...;...)岂不也是在代码中夹杂初始化操作么?所以原因并不是“老式C标准中,并不支持for的第一个参数为变量声明赋值语句。”
还有就是printf("%d\n",int c = i + j);这一句也是在代码中夹杂了初始化操作,而printf("%d\n",c = i + j);是正确的,因为这是赋值操作,不是初始化操作,不允许的只有声明和初始化两个操作,赋值是被允许的。
在看《C++ Primer》的时候有一句话我至今印象深刻,"It's essential to understand that initialization is not assignment",因为我初学C++时一直不能区分开初始化和赋值,哈哈。
但是我发现什么叫做先声明再使用?
int a = b + c;
不是一边声明一边使用吗?
是可以通过编译的啊!
我终于全明白了,
试编译了一下16楼的,之后我全明白了,
二楼说的是我误会意思,
C语言是不是只可以在函数的开头进行变量的声明,
而不可以在函数中进行变量声明?
而且我在那本书上看到过,不过当时没在意。
因为楼主 说了 printf("%d\n",int c = i + j);这一句也是在代码中夹杂了初始化操作
我才建议下看下PRINTF
=========================
至于这句我自己知道是错的,我自己都说了,从来没用过。