在file1上我将变量args定义为:
CLA args;
Run Code Online (Sandbox Code Playgroud)
在file2上我已将其声明为:
extern CLA* args;
Run Code Online (Sandbox Code Playgroud)
该程序将使用gcc和clang编译而没有错误,并且valgrind上也不会出现任何错误.但是有一个问题:在file2上,函数fprintf(args-> output,...)不会打印任何东西.为什么没有发出错误?
该程序将使用gcc和clang进行编译,没有错误
因为每个C文件都是独立编译的.生成的目标文件链接后,链接器只有符号名称.它不知道与这些符号相关的类型.
这是原因之一1即C++使用名称重整:符号的类型被嵌入在它的名字,因此如果有不匹配,将发生链路故障.
这就是为什么要么不使用全局变量,要么在头文件中声明它们,并在引用全局的任何地方包含该头文件,包括定义它的单元.
没有理由extern出现在.c文件中; 只在一个.h文件中.
并且valgrind上也不会出现任何错误.
我们还没有看到您的源代码,所以我们无法知道您如何错误地使用所述变量,以便valgrind可以检测到它.
1 - 另一个主要原因是支持重载功能.
| 归档时间: |
|
| 查看次数: |
111 次 |
| 最近记录: |