void f();
int main(int argc, char** argv)
{
if (f)
{
// other code
}
}与VS2017,链接抱怨未解决外部符号,而它的工作与GCC。根据C99规范,它有效吗?或者是实现细节?
发布于 2022-10-20 13:59:09
C标准要求每个符号都应该在一个正确的程序中精确地定义一次,但是如果没有遵守规则,则不需要任何诊断。因此,如果您声明一个从未在任何编译单元中定义的函数,则该函数的任何使用都超出了C规范。
gcc编译器有很多扩展,其中一些扩展也被clang所接受。如果你知道你只会用gcc,你可以用他们,如果你想写便携程序,你不应该使用。
发布于 2022-10-20 13:47:48
GCC认为公开的功能是存在的。,即使使用-O0,并因此优化代码如下:
#include <stdio.h>
int main(int argc, char** argv)
{
printf("Y\n");
}如果在编译器命令行中添加常见的警告选项,GCC也会对此发出警告。
发布于 2022-10-20 13:49:18
通常检查弱函数是否在嵌入式代码中定义(通常是用户定义的回调)。
不,它从来没有做过,因为它不能做。您的代码可能有一些指向函数的指针,并且您可以检查这些指针是否为NULL (即分配了一些函数指针引用,但不能检查这些引用是否正确)。
https://stackoverflow.com/questions/74140635
复制相似问题