c语言中我重复定义了为什么编译器没报错了

在头文件和源文件中定义了相同的变量kk,但是编译的时候为什么没报错呢!图片说明

8个回答

哪里显示出你重复定义了?
int kk;//全局变量声明

int main(……)
{
kk = 2;//对kk进行定义
}

TRYBYE
trybye 这不叫重复定义吗??kk定义了2次
4 年多之前 回复
TRYBYE
trybye 这不叫重复定义吗??kk定义了2次
4 年多之前 回复
TRYBYE
trybye 这不叫重复定义吗??kk定义了2次
4 年多之前 回复
u013704336
流浪的鹅卵石 回复TRYBYE: 这样当然不会报错的,main.c中的kk覆盖掉了main.h中的kk
4 年多之前 回复
TRYBYE
trybye 在main.h中
4 年多之前 回复

你没有重复定义, 一个是全局变量一个是局部变量。

TRYBYE
trybye 刚更新,看一下,
4 年多之前 回复

因为有 ifndef 这个控制,会检查重复定义的,如果前面定义了就不会再定义一遍

如果不是相互包含,那么问题不大。
如果包含了,不同编译器的宽容度不一样,这种问题没什么好纠结的
像我在VS下,楼主这样的连编译都过不了
全局变量如果用static 限定,那就是具有内部链接,只在文件内有效。如果不用static限定,那就具有外部链接,对别的文件(当然是同一工程的最终链接到一起的)可见。

qq423399099
小灸舞 回复TRYBYE: 不同的编译器看来宽容度差距还挺大
4 年多之前 回复
TRYBYE
trybye 在cfree中头文件和源文件中分别敷了不同的初值,还是可以no woring,no error
4 年多之前 回复
qq423399099
小灸舞 回复TRYBYE: 楼主你试一下给两个kk都附上初值,我想你是过不了编译的
4 年多之前 回复
qq423399099
小灸舞 回复TRYBYE: 确实,感觉GCC在有的方面没有VS严格,有些人的回复我也是醉了。。。。
4 年多之前 回复
TRYBYE
trybye 实际情况不是int kk;会在main.c中出现2次吗?没加static的全局变量应该在所有文件中都可见的啊,vs是不是要求严格一点啊,对新手来讲是vs是不是能更好的养成一些好习惯,谢谢
4 年多之前 回复
TRYBYE
trybye 实际情况不是int kk;会在main.c中出现2次吗?没加static的全局变量应该在所有文件中都可见的啊,vs是不是要求严格一点啊,对新手来讲是vs是不是能更好的养成一些好习惯,谢谢
4 年多之前 回复

这个问题涉及到变量的作用于问题,c语言规定,变量的作用于从变量声明的地方开始,到本文键结束为止。

这跟编译器版本有关, 你的编译器并不支持新的c标准, 建议用vc或者vs

在c语言中可以有多个声明,不会报错。但是要是在C++中会报错

你把main.h中的 #ifdef 和 #endif去掉估计就会出错了

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问