当前位置:  开发笔记 > 编程语言 > 正文

宏名称的有效字符是什么?

如何解决《宏名称的有效字符是什么?》经验,为你挑选了3个好方法。

C风格的宏名称是否与标识符具有相同的命名规则?在编译器升级之后,它现在为遗留应用程序发出此警告:

warning #3649-D: white space is required between the macro name "CHAR_" and its replacement text
  #define         CHAR_&        38

这行代码定义了&符号的ASCII值常量.

#define   DOL_SN        36
#define   PERCENT       37
#define   CHAR_&        38
#define   RT_SING       39
#define   LF_PAR        40

我假设这个定义(实际上没有被任何代码引用,据我所知)是错误的,应该改为像"CHAR_AMPERSAND"这样的东西?



1> Adam Rosenfi..:

宏名称只能由字母数字字符和下划线,即'a-z','A-Z','0-9',和'_',和第一个字符不应该是一个数字.一些预处理器也允许美元符号字符'$',但你不应该使用它; 不幸的是我不能引用C标准,因为我没有它的副本.

从海湾合作委员会文件:

预处理标记分​​为五大类:标识符,预处理数字,字符串文字,标点符号等.一个 标识符是相同的C中的标识符:字母,数字,或者下划线的任意序列,其以字母或下划线开始.C的关键词对预处理器没有意义; 它们是普通的标识符.例如,您可以定义名称为关键字的宏.唯一可以被视为预处理关键字的标识符是 defined.见定义.

对于使用C预处理器的其他语言来说,情况尤其如此.但是,即使在预处理器中,C++的一些关键字也很重要.请参阅C++命名运算符.

在1999 C标准中,标识符可能包含不属于"基本源字符集"的字母,由执行人员自行决定(例如重音拉丁字母,希腊字母或中文表意文字).这可以通过扩展字符集或'\u''\U'转义序列来完成.GCC中此功能的实现是实验性的; 这些字符仅在'\u''\U'表单中被接受,并且仅在 -fextended-identifiers使用时才被接受 .

作为延伸,海湾合作委员会将其'$'视为一封信.这是为了与某些系统(如VMS)兼容,这些系统'$' 通常用于系统定义的函数和对象名称.'$'不是严格符合模式的字母,或者如果您指定-$选项.请参阅调用.


ISO/IEC 9899:TC3 6.10/1规定了预处理指令的语法,明确指出宏名称与标识符共享完全相同的规则.6.4.2.1/1指定标识符的规则.

2> Alex Gray..:

clang允许很多"疯狂"的角色..虽然我一直在努力寻找任何多少押韵或理由 - 至于为什么 有些人被允许,有些则不然.例如..

#define   ?:          /// WORKS FINE
#define  ?  @end        /// WORKS FINE
#define   @interface  /// WORKS FINE
#define ?  @protocol   /// WORKS FINE

然而

#define ?   TEL     /// ERROR: Macro name must be an identifier.
#define ?   NO     /// ERROR: Macro name must be an identifier.
#define ?   UP      /// ERROR: Macro name must be an identifier.
#define ?   ==     /// ERROR: Macro name must be an identifier.
#define   APPLE   /// ERROR: Macro name must be an identifier.

谁知道. 我很乐意......但到目前为止,Google已经让我失望了.任何关于这个主题的见解,将是赞赏的️.



3> philant..:

你是对的,就名称而言,相同的规则适用于宏和标识符:有效字符是[A-Za-z0-9_].

使用CAPITALIZED名称来区分宏与其他标识符(变量和函数名称)的常见用法.

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有