C predefined macros __FILE__,__LINE__,__func__

C predefined macros __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__?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值