如何解决使用全局变量时可以省略“ extern”吗?
最近我在C语言中发现了一个关于'extern'的奇怪东西
当我使用SESSION_COOKIE_DOMAIN = os.environ.get('SESSION_COOKIE_DOMAIN','mysite.com')
进行编译时,结果很好,没有编译错误(也没有警告!)。输出为gcc tmp.c tmp2.c -o tmp -Wall
。但是以下代码不会通过链接过程(唯一的区别是我在第二个文件中初始化了1
)
似乎编译器将任何未初始化的变量视为外部变量?
解决方法
int x = value;
是x
的定义。在文件作用域中使用其中两个会创建多个定义,从而导致链接错误。
int x;
是一个临时定义。根据C标准,在同一个翻译单元(正在编译的源文件,包括所有包含的文件)中没有常规定义的情况下,它用作定义。
当在一个翻译单元中提供定义并在另一翻译单元中提供相同标识符的暂定定义时,C标准未定义行为,但是Unix工具通常允许合并暂定定义,从而允许链接完成。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。