为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C
蛊毒传说 2019-11-03 04:04:58
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”之类的东西吗?
查看完整描述

3 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

宏名称只能由字母数字字符和下划线,即'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)兼容,该系统'$' 通常在系统定义的函数和对象名称中使用。'$'在严格符合模式下不是字母,或者如果您指定了-$选项。请参阅调用。



查看完整回答
反对 回复 2019-11-04
?
慕森卡

TA贡献1806条经验 获得超8个赞

为变量名称指定有效标识符的相同规则适用于宏名称,但宏可能与关键字具有相同的名称。标识符名称中的有效字符包括digitsnon-digits并且不能以数字开头。 non-digits包括大写字母AZ,小写字母az,下划线和任何实现定义的字符。

查看完整回答
反对 回复 2019-11-04
  • 3 回答
  • 0 关注
  • 775 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信