C predefined macros __FILE__,__LINE__,__func__

  • \_MSC_VER
  • \_\_FILE\_\_,\_\_LINE\_\_,\_\_func__
  • 參考連結

_MSC_VER

不同的編譯器(gcc,clang,msvc)會設定自己的pre-processor macros。我們可以用這些macro來判斷目前代碼是運行在什麼平台上,或是由什麼編譯器編譯的。

如果使用的是msvc(Microsoft Visual C++)編譯器,那麼將會有_MSC_VER這個macro。我們可以檢查這個macro是否存在,以此來判斷目前使用的編譯器是否為msvc。

__FILE__,__LINE__,__func__

C語言中有predefined identifier:__func__,表示所處函數的名稱。

另外還有predefined macro:__FILE____LINE__,分別表示當前檔案名稱及所在行數。

TensorRT/samples/common/common.h中:

#ifdef _MSC_VER
#define FN_NAME __FUNCTION__
#else
#define FN_NAME __func__
#endif//...#define CHECK_RETURN_W_MSG(status, val, errMsg)                                                                        \do                                                                                                                 \{                                                                                                                  \if (!(status))                                                                                                 \{                                                                                                              \std::cerr << errMsg << " Error in " << __FILE__ << ", function " << FN_NAME << "(), line " << __LINE__     \<< std::endl;                                                                                    \return val;                                                                                                \}                                                                                                              \} while (0)

注意到以下這段:

#ifdef _MSC_VER
#define FN_NAME __FUNCTION__
#else
#define FN_NAME __func__
#endif

它首先判斷目前使用的編譯器是否為msvc,如果是,則採用__FUNCTION__做為FN_NAME,若非msvc,則採用C99中就有的__func__

這是因為:

Visual C++, which does not support C99 and
does not yet support all of C++0x, does not provide __func__.

即msvc並未提供__func__這個macro,所以我們才使用__FUNCTION__來替代。

參考連結

Home / Guide to predefined macros in C++ compilers (gcc, clang, msvc etc.)

Predefined Identifier __func__ in C

What’s the difference between __PRETTY_FUNCTION__, __FUNCTION__, __func__?

C predefined macros __FILE__,__LINE__,__func__相关推荐

  1. __FILE__, __LINE__, __FUNCTION__

    今天看源码,考到了如下代码,有点不理解.代码如下: #ifndef DBG_PRINTF(_x_) #ifdef WEBDBG #define DBG_PRINTF(_x_) \ do{ \ prin ...

  2. PHP 魔术常量,__LINE__,__FILE__,__DIR__等等8个常用魔术常量

    PHP 向它运行的任何脚本提供了大量的预定义常量. 不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了. 有八个魔术常量它们的值随着它们 ...

  3. 宏的高级使用--##,__VA_ARGS__, __FILE__, __FUNCTION__等

    参考网址:http://blog.csdn.net/yiya1989/article/details/7849588 参考网址:http://fanrey.iteye.com/blog/1709416 ...

  4. __FILE__, __FUNCTION__, __LINE__学习篇,谨以此文告别那无知的岁月

    printf("\n%s,%s,%d\n", __FILE__, __FUNCTION__, __LINE__); 经常会在代码中看到类似于上面的log, 虽然一直很好奇__FIL ...

  5. php路径详解,详解与PHP路径相关的dirname,realpath,__FILE__函数

    在文件中比如:程序根目录在:E:\wamp\www 中 1. __FILE__ 当前文件的绝对路径 如果在index.php中调用 则返回 E:\wamp\www\index.php 下面再看一下 程 ...

  6. GCC 预处理的宏 (predefined macros)

    关于宏(macro) 在很早很早就知道, 但是只限于能看懂,在自己编程中从未使用.但是,在Powe8上将GATK HaplotypeCaller的GPU实现和SIMD实行并行处理的时候,遇到了很大的问 ...

  7. 【Note2】route,iptables,macvlan,sol

    文章目录 1.linux的route指令:route add 1.1 案例:从ubuntu机器ping 199.199.199.199,配置路由使能通 2.防火墙iptables:(ip+tables ...

  8. 使用__FILE__和__LINE__定位错误

    问题:当运行时错误产生时,我怎样才能得到包含C++文件名和行号的字符串信息? 回答:在C++中的__FILE__预编译指示器包含了被编译的文件名,而__LINE__则包含了源代码的行号.__FILE_ ...

  9. 引用内部函数绑定机制,R转义字符,C++引用,别名,模板元,宏,断言,C++多线程,C++智能指针

     1.引用内部函数绑定机制 #include<iostream> #include<functional> usingnamespacestd; usingnamespac ...

最新文章

  1. flask与简单的form表单
  2. 线索二叉树怎么画_固原超级记忆技巧课程怎么学_蒙正智升教育
  3. LeetCode 最大正方形
  4. python安装sqap_python文件I/O
  5. 接口实例(C#,IShape)【C#】
  6. git 上传项目到linux仓库_使用子模块和子树来管理 Git 项目 | Linux 中国
  7. python的取负运算_python 负数取模运算实例
  8. 软件测试记录表模版,简单软件测试报告模板.doc
  9. linux 1394驱动下载,1394驱动
  10. win10电脑双屏如何设置不同的桌面
  11. 百度搜索引擎都有哪些算法
  12. 两步彻底关闭Windows默认共享文件夹(含IPC$)
  13. 1、马克思主义哲学是科学的世界观和方法论
  14. 基于eBPF的开源工具Kindling之page-fault事件可观测性实现机制
  15. 第一次写writeup
  16. 怎么彻底处理windows下遇到的广告流氓软件例如:双11天喵、霸业传奇、贪玩蓝约等
  17. 微信小程序中显示换行、空格
  18. C语言编程从键盘输入n值
  19. 从实体密保卡到动态口令令牌
  20. android点击号码打电话,android-拨打电话单击一个按钮

热门文章

  1. 【Java编程思想】读书笔记(二)第六章---第十章
  2. 计算机考研数学考数学二的专业,考研常识:哪些专业考数学二?
  3. 计算机屏幕节省电,电脑显示器如何省电
  4. 大数据产品开发流程规范_大数据系统开发步骤流程是怎样的
  5. Incapsula reese84 分析与破解
  6. 锤子android 7,锤子新机坚果Pro配置放出:骁龙626处理器、Android 7.1.1系统
  7. con 元器件符号_PROTEUS中元器件符号
  8. python独立样本t检验 图_SPSS实操两个独立样本均数比较的t检验
  9. 学习Nisy作者c语言教程笔记1
  10. hrbp 牵着鼻子走_8招让你不再被职场牵着鼻子走