哪些隐式声明合法有效?除标识符__func__外还有哪些相关示例?
合法的隐式声明范围
你提到的两条无效规则,针对的是用户自定义函数、普通变量的隐式声明。C标准明确规定、由编译器自动提供的特殊标识符不属于这个范畴,是合法有效的,这类标识符大多是预定义宏或者编译器自动注入的特殊常量。
常见的合法隐式声明标识符
除了你提到的__func__(C99及以上标准规定,每个函数内自动声明的静态字符串常量,存储当前函数名)之外,还有大量标准规定的同类标识符,常用的包括:
__FILE__:字符串常量,存储当前源文件的编译路径__LINE__:整型常量,存储当前代码在源文件中的行号__DATE__:字符串常量,存储当前源文件的编译日期,格式为Mmm dd yyyy__TIME__:字符串常量,存储当前源文件的编译时间,格式为hh:mm:ss__STDC__:整型常量,标准C兼容的编译器会将其定义为1,标识当前环境符合C标准要求__STDC_VERSION__:整型常量,标识当前使用的C标准版本,比如C99对应值为199901L、C11对应值为201112L__STDC_HOSTED__:C11及以上标准新增,值为1表示当前是带完整标准库的宿主环境,值为0表示是无操作系统的裸机环境
不同编译器也会额外提供一些扩展的预定义隐式标识符,比如GCC的__GNUC__、Clang的__clang__、MSVC的_MSC_VER等,只要是对应编译器官方文档明确说明的,同样属于合法有效的隐式声明。
需要注意:除了上述标准或者编译器明确规定的特殊标识符之外,所有用户自定义函数、普通变量的隐式声明均为无效,符合你给出的两条规则。
内容的提问来源于stack exchange,提问作者pmor
相关产品推荐
相关产品推荐

