c - 如何防止 Visual C 编译器优化掉 "unused"全局变量

标签 c visual-studio-2010 visual-c++ linker

<分区>

Possible Duplicate:
Why does const imply internal linkage in C++, when it doesn’t in C?
What is external linkage and internal linkage in C++

我有两个 C 文件,我正在尝试将其编译为可执行文件。一个文件只包含一个声明如下(简化)。

const char *foo[2] = {"thing1", "thing2"};

第二个 c 文件做这个

extern const char *foo[2];
main()
{
 //Code that does stuff with foo
}

编译时出现链接器错误,提示 foo 是未解析的外部符号。我假设编译器正在优化 foo。这里有什么想法吗?

最佳答案

您的声明没有任何问题。代码应该按原样编译和链接,假设您添加显式 int 作为 main 的返回类型。对于链接器错误,我能想到的唯一解释是您忘记向链接器提供所有必需的目标文件。

试图通过 C++ const 对象具有内部链接这一事实来解释这个问题的答案具有误导性和不相关性。上面的对象 foo 不是 const 对象。

关于c - 如何防止 Visual C 编译器优化掉 "unused"全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13887120/

相关文章:

c - 在微调按钮中右对齐 (gtk/C)

c++ - 使用 128 位种子的伪随机排列

c++ - 堆分离解决内存碎片

visual-c++ - 如何编写编译器可以高效编译为 SSE 或 AVX 的 c++ 代码?

c - 通过探测从缓冲区写入文件,C 程序

c - C - IP 中的 UDP 聊天应用程序打印为 0.0.0.0

visual-studio-2010 - 如何修改 Visual Studio 2010 C# 测试项目模板中的默认 UnitTest1.cs 文件模板?

visual-studio-2010 - “Active (Debug)”与“Debug”

c++ - 使用接口(interface)类作为另一个类中的成员类型

c++ - 为什么我的 visual studio 构建不正确?