void f();
int main(int argc, char** argv)
{
    if (f)
    {
        // other code
    }
}

在VS2017中,链接器投诉未解决的外部符号,同时与GCC一起工作.根据C99规范,它是否有效?还是它的实现细节?

推荐答案

C标准要求每个符号在正确的程序中应该恰好为defined一次,但如果不遵守规则,则不需要任何诊断.因此,如果您声明了一个从未在任何编译单元中定义的函数,则该函数的任何使用都超出了C规范.

众所周知,GCC编译器有很多扩展,其中一些也被clang接受.如果你知道你只会用GCC,你可以使用它们,如果你想写可移植的程序,你不应该使用它们.

C++相关问答推荐

如何解决C中的严格别名?

标准的C17标准是用括号将参数包装在函数声明中吗

当打印字符串时,为什么在c中没有使用常量限定符时我会收到警告?

为什么可以在typedef之前使用typedef d struct 体?

将fget()与strcMP()一起使用不是正确的比较

在C23中使用_GENERIC实现带有右值的IS_POINTER(P)?

具有交换链获取和命令缓冲区提交的同步-危险-读后写错误

如何在C中引发/处理自定义信号?

为什么cudaFree不需要数据 struct 的地址?

使用sscanf获取零个或多个长度的字符串

在句子中转换单词的问题

如何在C++中安全地进行浮点运算

Fprintf正在写入多个 struct 成员,并且数据过剩

C编译和运行

我编写这段代码是为了判断一个数字是质数、阿姆斯特朗还是完全数,但由于某种原因,当我使用大数时,它不会打印出来

可以';t从A9G模块拨打电话

挥发性语义的形式化理解

关于不同C编译器中的__attribute__支持

程序打印一些随机空行

C语言程序流程解释