Chinaunix

标题: 想问个很傻的问题,我查了很多书都没有说这个…… [打印本页]

作者: py    时间: 2003-12-27 11:50
标题: 想问个很傻的问题,我查了很多书都没有说这个……
main()
{
          int i=1;
        printf("%d\n",i);
        int j;
        if(i) {
                j=2;
                printf("%d\n",j);
          }
}
我编译这段代码的时候就会出错
# gcc test.c
test.c: In function 'main':
test.c:5: parse error before 'int'
test.c:7: 'j' undeclared (first use in this function)
test.c:7: (Each undeclared identifier is reported only once)
test.c:7: for each function it appears in.)
这是说我没定义j的类型,但如果我把第4行去掉,也就是在最开始定义j就没有错误了。
我的毕业设计要用c语言,可现在对c还不了解,是不是c语言必须在最开始就把所有的变量都定义了,不然就会出错?
另外我改成这样就不会有错了:
main()
{
        int i=1;
        printf("%d\n",i);
        if(i) {
                int j;
                printf("%d\n",j);
        }
}
但这样就会出同样的错误:
main()
{
        int i=1;
        printf("%d\n",i);
        if(i) {
                printf("%d\n",i);
                int j;
                printf("%d\n",j);
        }
}
真是让人郁闷呀``````
麻烦大家给我讲讲这是怎么回事!谢谢!
作者: zkyguanl    时间: 2003-12-27 12:02
提示: 作者被禁止或删除 内容自动屏蔽
作者: 淼淼    时间: 2003-12-27 12:42
标题: 想问个很傻的问题,我查了很多书都没有说这个……
在C中对变量要在程序体——引用前加以定义
作者: 只爱一点点    时间: 2003-12-27 13:31
标题: 想问个很傻的问题,我查了很多书都没有说这个……
原帖由 "zkyguanl" 发表:
C语言要求 在一个执行体中变量要先声明后使用,所以你的
printf("%d",i);
int j;
是错的,
在C语言中  { 开始一个执行体,  }结束一个执行体, 所以
if(i) {
int j;
printf("%d\n",j);
} 是正确的


同意。
C++则好像提倡 离使用处越近定义越好。

不过我喜欢C的规则。
作者: tutuzhang    时间: 2003-12-27 13:44
标题: 想问个很傻的问题,我查了很多书都没有说这个……
你用的是什么编译环境?
为什么我的gcc编译没有出错?
作者: tutuzhang    时间: 2003-12-27 13:55
标题: 想问个很傻的问题,我查了很多书都没有说这个……
你的编译选项是什么?
作者: bjf    时间: 2003-12-27 14:27
标题: 想问个很傻的问题,我查了很多书都没有说这个……
同意zkyguanl的意见
作者: 天上流星    时间: 2003-12-27 14:34
标题: 想问个很傻的问题,我查了很多书都没有说这个……
要在开始时定变量
作者: lixforalpha    时间: 2003-12-27 16:40
标题: 想问个很傻的问题,我查了很多书都没有说这个……
偶从来都是先比着书本抄代码(当然有些书里的代码本身就不完善)编译,没遇见类似问题。原来还有这么一说,又明确了些概念。
作者: py    时间: 2003-12-27 21:53
标题: 想问个很傻的问题,我查了很多书都没有说这个……
谢谢大家~~!!!!!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2