__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__ 宏是不是可移植?的主要内容,如果未能解决你的问题,请参考以下文章