news 2026/4/16 13:01:25

简单理解: __FUNCTION__ 是什么?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
简单理解: __FUNCTION__ 是什么?

1. 什么是__FUNCTION__

__FUNCTION__是 C/C++ 编译器提供的预定义宏(也叫内置宏),它会在编译阶段被自动替换为当前函数的名称(字符串形式)。简单来说,它就是一个 “函数名标签”,能让程序在运行时知道自己正处在哪个函数里。

需要注意:

  • 它是编译器扩展(非标准 C/C++,但几乎所有主流编译器如 GCC、Clang、MSVC 都支持);
  • __func__(C99 标准)功能几乎一致,__FUNCTION__是更早的非标准写法,兼容性更广。

2.__FUNCTION__的核心用途

最核心的价值是调试和日志输出,其次是简化代码维护,具体看这几个场景:

场景 1:调试 / 日志(最常用)

当程序报错或输出日志时,用__FUNCTION__可以精准定位到问题所在的函数,不用手动写函数名,既高效又避免写错。

示例代码:

#include <stdio.h> void calculate_sum(int a, int b) { // 打印当前函数名 + 关键信息,方便调试 printf("[%s] 开始计算 %d + %d\n", __FUNCTION__, a, b); int sum = a + b; printf("[%s] 计算结果:%d\n", __FUNCTION__, sum); } void print_error(const char* msg) { // 错误日志中带上函数名,快速定位问题 fprintf(stderr, "[ERROR][%s]:%s\n", __FUNCTION__, msg); } int main() { calculate_sum(3, 5); print_error("参数不能为空"); return 0; }

输出结果

[calculate_sum] 开始计算 3 + 5 [calculate_sum] 计算结果:8 [ERROR][print_error]:参数不能为空
场景 2:断言(Assert)增强

结合assert使用,断言失败时能直接显示出错的函数名,定位更精准:

#include <assert.h> #include <stdio.h> void divide(int a, int b) { // 断言失败时,会打印函数名 + 断言条件 assert(b != 0 && __FUNCTION__); printf("%d / %d = %d\n", a, b, a/b); } int main() { divide(10, 0); // 触发断言 return 0; }

输出(GCC)

a.out: test.c:7: divide: Assertion `b != 0 && __FUNCTION__' failed. Aborted (core dumped)

能直接看到是divide函数中b=0导致断言失败。

场景 3:简化代码维护

如果手动写函数名到日志里,后续修改函数名时需要同步改日志中的字符串,容易遗漏;用__FUNCTION__则完全不用管,编译器会自动更新。

3. 注意事项

  • __FUNCTION__只在函数内部有效,全局作用域中使用会报错 / 无意义;
  • C++ 中还可以用__PRETTY_FUNCTION__(GCC/Clang)或__FUNCSIG__(MSVC),能显示更详细的函数签名(如参数类型、返回值、类名);
  • 它是编译期替换,不是运行时获取,性能无损耗。

总结

  1. __FUNCTION__是编译器内置宏,编译时替换为当前函数名(字符串);
  2. 核心用途是调试 / 日志 / 断言,能精准定位代码执行位置,简化维护;
  3. 兼容性好,几乎所有 C/C++ 编译器都支持,是调试排错的实用工具。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/11 15:25:47

Transformers模型详解之Layer Normalization作用

Transformers模型详解之Layer Normalization作用 在构建超大规模语言模型的今天&#xff0c;一个看似不起眼的技术细节——归一化方法的选择&#xff0c;往往决定了整个训练过程是平稳收敛还是频繁崩溃。当你在训练一个12层以上的Transformer时&#xff0c;是否遇到过梯度突然爆…

作者头像 李华
网站建设 2026/4/12 10:39:55

英超黑马光环褪色!维拉一骑绝尘,三队陷泥潭仅剩独苗

英超第18轮战罢&#xff0c;积分榜上的格局正悄然固化。阿斯顿维拉客场逆转切尔西&#xff0c;豪取队史平纪录的11连胜&#xff0c;成为本赛季唯一持续闪耀的黑马。而赛季初同样令人眼前一亮的伯恩茅斯、桑德兰和水晶宫&#xff0c;则在近期接连受挫&#xff0c;光环逐渐褪去。…

作者头像 李华
网站建设 2026/4/16 12:12:01

【python大数据毕设实战】中国租房信息可视化分析系统、Hadoop、计算机毕业设计、包括数据爬取、数据分析、数据可视化、机器学习、实战教学

&#x1f34a;作者&#xff1a;计算机毕设匠心工作室 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目…

作者头像 李华
网站建设 2026/4/16 12:23:51

GitHub Actions自动化测试TensorFlow代码质量

GitHub Actions自动化测试TensorFlow代码质量 在深度学习项目从个人实验走向团队协作和产品落地的过程中&#xff0c;一个常见的痛点浮现出来&#xff1a;为什么代码在我本地运行得好好的&#xff0c;到了CI环境却频频报错&#xff1f;这种“我这边没问题”的尴尬局面&#xff…

作者头像 李华
网站建设 2026/4/16 12:57:17

技术博客引流策略:结合TensorFlow热点话题创作

TensorFlow-v2.9深度学习镜像&#xff1a;构建高效AI开发环境的实战指南 在人工智能项目落地的过程中&#xff0c;一个常被低估却至关重要的环节是——如何快速、稳定地搭建开发环境。你是否曾遇到过这样的场景&#xff1a;新成员加入团队&#xff0c;花了整整两天才配好Tensor…

作者头像 李华
网站建设 2026/4/15 4:26:45

GPU算力竞价实例降低TensorFlow训练成本

GPU算力竞价实例降低TensorFlow训练成本 在深度学习模型日益庞大、训练任务愈加频繁的今天&#xff0c;一个现实问题摆在许多开发者面前&#xff1a;如何在有限预算下完成高效的神经网络训练&#xff1f;尤其是在图像识别、自然语言处理等高算力需求场景中&#xff0c;使用按需…

作者头像 李华