【问题标题】:Is there equivelant "-fno-common" compile option for Visual Sutdio for pure C?纯 C 的 Visual Studio 是否有等效的“-fno-common”编译器选项?
【发布时间】:2020-05-12 02:51:57
【问题描述】:

我不熟悉强弱符号概念。对于以下示例(纯 C)代码,x 定义了两次,一次是强,一次是弱。我想让我的编译器报错:

foo.c:

#include <stdio.h>
void f(void);

int x = 15213;

int main(){
    f();
    printf("x = %d\n", x);
    return 0;
}

bar.c

int x;

void f(){
    x = 15212;
}

对于 gcc,“-fno-common”是我想要的:

gcc -o foobar foo.c bar.c -fno-common 因此它报告重新定义的符号 (x)。

Visual Studio 中是否有等效的编译选项? (如果我描述有误,请纠正我)

【问题讨论】:

    标签: c hyperlink compilation symbols


    【解决方案1】:

    这是一个链接选项:不是编译选项。编译器不知道 x 在其他任何地方被声明的任何事情,除了它正在编译的文件中。但是,链接器会看到两个 x 声明,并将生成错误 2005 或 1169。

    【讨论】:

    • 是的,这是一个链接错误,而不是编译错误。但是,我在 VS2017 中测试,foo.c 和 bar.c 不会导致 2005 或 1169 链接错误。只有将它们保存为“.cpp”文件时才会产生链接错误。我只是对如何在纯 C 文件中发现并让链接器报告错误感兴趣。
    • 在 C 中似乎没有解决方案。唯一的另一种选择是通过设置 /TP 参数强制它们进行 C++ 编译,但它不会选择 C ​​语义错误。
    猜你喜欢
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-07
    • 2018-08-13
    相关资源
    最近更新 更多