猿问

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

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”之类的东西吗?



蛊毒传说
浏览 776回答 3
3回答

慕标5832272

宏名称只能由字母数字字符和下划线,即'a-z','A-Z','0-9',和'_',和第一个字符不应该是一个数字。一些预处理器还允许使用美元符号字符'$',但您不应该使用它。不幸的是,由于我没有C标准,所以我无法引用它。从GCC文档中:预处理令牌分为五大类:标识符,预处理数字,字符串文字,标点符号等。一个 标识符是相同的C中的标识符:字母,数字,或者下划线的任意序列,其以字母或下划线开始。C的关键字对预处理器没有任何意义;它们是普通标识符。例如,您可以定义名称为关键字的宏。可以视为预处理关键字的唯一标识符是  defined。请参阅已定义。对于使用C预处理程序的其他语言,大多数情况都是如此。但是,即使在预处理器中,C ++的一些关键字也很重要。请参阅C ++命名运算符。在1999 C标准中,标识符可以包含不属于“基本来源字符集”的字母,具体取决于实现方式(例如带重音的拉丁字母,希腊字母或中文表意文字)。这可以通过扩展字符集或'\u'和'\U'转义序列来完成。此功能在GCC中的实施是实验性的;此类字符仅在'\u'和'\U'形式中接受, 并且仅在 -fextended-identifiers使用时使用。作为扩展,GCC视为'$'字母。这是为了与某些系统(例如VMS)兼容,该系统'$' 通常在系统定义的函数和对象名称中使用。'$'在严格符合模式下不是字母,或者如果您指定了-$选项。请参阅调用。

慕森卡

为变量名称指定有效标识符的相同规则适用于宏名称,但宏可能与关键字具有相同的名称。标识符名称中的有效字符包括digits,non-digits并且不能以数字开头。 non-digits包括大写字母AZ,小写字母az,下划线和任何实现定义的字符。
随时随地看视频慕课网APP
我要回答