吾爱程序员:这里有好玩的游戏和软件
当前位置:首页C语言教程 → C中的预定义标识符__func__

C中的预定义标识符__func__

来源:网络 | 更新时间:2022-01-15 19:04:57
在我们开始讨论__func__之前,让我们编写一些代码片段并预测输出: 
#include <stdio.h>

int main()
{
printf("%s",__func__);
return 0;
}
由于未定义变量__func__会导致编译错误吗?好吧,正如您到目前为止所猜到的那样,它不会给出任何编译错误并且会打印main!  C 语言标准(即 C99 和 C11)定义了一个预定义标识符,如下所示: 标识符 __func__ 应由翻译器隐式声明,就好像紧跟在每个函数定义的左大括号之后,声明 static const char __func__[] = “function-name”; 出现,其中 function-name 是词法封闭函数的名称。 这意味着 C 编译器在每个函数中隐式添加__func__以便可以在该函数中使用它来获取函数名。为了更好地理解它,让我们编写以下代码: 
#include <stdio.h>
void foo(void)
{
printf("%s",__func__);
}
void bar(void)
{
printf("%s",__func__);
}

int main()
{
foo();
bar();
return 0;
}
它将输出为foob​​ar。这个预定义标识符的一个用例可能是记录一个大程序的输出,程序员可以使用__func__来获取当前函数,而不是显式地提及完整的函数名称。现在如果我们再定义一个名为__func__的变量会发生什么 
#include <stdio.h>

int __func__ = 10;
int main()
{
printf("%d",__func__);
return 0;
}
由于 C 标准说编译器为每个函数隐式定义__func__作为函数名,我们不应该首先定义__func__如果有人明确定义__func__ ,您可能会收到错误,但 C 标准会说“未定义的行为” 。 为了结束对预定义标识符__func__的讨论,让我们也提到预定义宏(例如 __FILE__ 和 __LINE__ 等)。基本上,C 标准条款 6.10.8 提到了几个预定义宏,其中__FILE____LINE__与此处相关。  看看以下代码片段的输出是值得的: 
#include <stdio.h>

int main()
{
printf("In file:%s, function:%s() and line:%d",__FILE__,__func__,__LINE__);

return 0;
}
我们不解释输出,而是让您猜测和理解__FILE____LINE__的作用!

最新文章

热点资讯

手游排行榜

CopyRight 2020-2030吾爱程序员

鄂ICP备2021004581号-8

本站资源收集于网络,如有侵权请联系我们:35492删除0109@qq.com