开发者社区> 问答> 正文

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

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

展开
收起
爱吃鱼的程序员 2020-06-23 16:23:53 1165 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

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

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

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

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

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

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

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

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

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

    2020-06-23 16:24:10
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载