__COUNTER__ 宏是不是可移植?

Posted

技术标签:

【中文标题】__COUNTER__ 宏是不是可移植?【英文标题】:Is __COUNTER__ macro portable?__COUNTER__ 宏是否可移植? 【发布时间】:2014-10-02 11:53:58 【问题描述】:

我有一段代码使用__COUNTER__ 宏为变量生成唯一名称。

此代码可移植吗?我知道 GCC 和 MSVS 支持它。其他编译器呢?宏是标准定义的(据我所知,在 C++14 之前不是)。

【问题讨论】:

如果您能对您关心的编译器范围有所了解,那么提供对您有用的答案会有所帮助...... 【参考方案1】:

这绝对是标准。

这是一个编译器扩展 (GNU C extensions)

常见的预定义宏是 GNU C 扩展。

还有一个Microsoft-specific one,

Microsoft 特定的预定义宏:

__ 计数器 __

clang 也支持作为语言扩展。

The standard doesn't mention it anywhere.

【讨论】:

IAR C/C++ Compiler (for AVR) 也支持它【参考方案2】:

GCC 手册,Common Predefined Macros 部分,状态

常见的预定义宏是 GNU C 扩展。

我也从未在 C99、C11 或 C++11 标准中看到过这个宏。

至于实用的便携性:Clang 也支持。

【讨论】:

【参考方案3】:

似乎没有。当我在standard pdf 上 ctrl+f "__COUNTER__" 时,我找不到任何东西>o

【讨论】:

以上是关于__COUNTER__ 宏是不是可移植?的主要内容,如果未能解决你的问题,请参考以下文章

为可移植 C 库使用 GCC __sync 扩展

可移植地识别非标准 C++?

__get_cpuid 的可移植性如何?

__extension__关键字是否可以在所有编译器中移植?

编译可移植的python

如何将 GTK2 像素图移植到 GTK3_