首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >检查函数是否在C中定义有效吗?

检查函数是否在C中定义有效吗?
EN

Stack Overflow用户
提问于 2022-10-20 13:23:54
回答 3查看 79关注 0票数 4
代码语言:javascript
复制
void f();
int main(int argc, char** argv)
{
    if (f)
    {
        // other code
    }
}

与VS2017,链接抱怨未解决外部符号,而它的工作与GCC。根据C99规范,它有效吗?或者是实现细节?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-10-20 13:59:09

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

gcc编译器有很多扩展,其中一些扩展也被clang所接受。如果你知道你只会用gcc,你可以用他们,如果你想写便携程序,你不应该使用。

票数 3
EN

Stack Overflow用户

发布于 2022-10-20 13:47:48

GCC认为公开的功能是存在的。,即使使用-O0,并因此优化代码如下:

代码语言:javascript
复制
#include <stdio.h>

int main(int argc, char** argv)
{
    printf("Y\n");
}

如果在编译器命令行中添加常见的警告选项,GCC也会对此发出警告。

票数 0
EN

Stack Overflow用户

发布于 2022-10-20 13:49:18

通常检查弱函数是否在嵌入式代码中定义(通常是用户定义的回调)。

不,它从来没有做过,因为它不能做。您的代码可能有一些指向函数的指针,并且您可以检查这些指针是否为NULL (即分配了一些函数指针引用,但不能检查这些引用是否正确)。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74140635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档