C++03中是否允许在标识符中使用美元符号?

16

C++标准对在标识符中使用美元符号(例如Hello$World)有何规定?它们是否合法?


3
我认为他在特别询问C++标准,因为并不是所有编译器都完全符合标准,有些编译器有自己的扩展,这可能会使代码合法。 - Kevin Loney
3
C99标准明确允许平台定义其他合法的标识符字符。PDP11和VAX的Decus C编译器允许使用$,因为大多数系统调用都在其名称中包含$。 "$保留给Digital公司"。我手头没有旧的C标准或C++标准来检查是否符合要求... - RBerteig
8
@Zifre:你的评论有必要吗?既然你需要问,那么不,他不能简单地在他喜欢的编译器中尝试,因为那只会告诉他编译器是否允许它,而不是语言是否允许。在C++中,这是一个重要的区别。 - jalf
7个回答

16

c++标识符可以由以下任何字符组成: 下划线_, 数字0-9, 字母a-z(包括大写和小写),但不能以数字开头。

有一些例外情况,因为C99允许对标准进行扩展(例如visual studio)。


3
这在VS中是允许的,太荒谬了。微软总是必须根据自己的标准制作扩展... - Zifre
15
每个重要的C++编译器都有许多好用的扩展功能,微软并非独此一份。 - jalf
11
GCC也允许使用美元符号。 - Max Lybbert
2
您缺少附录E - (规范)“标识符的通用字符名称”[扩展ID]。然而,这会添加更多字母(可能带有重音或来自不同脚本),而不是像$这样的符号。 - MSalters
2
请注意,这仅适用于C++03。C++11允许在标识符中使用通用字符名称和实现定义的字符。 - Arne Mertz
显示剩余3条评论

14

它们是非法的。在标识符中,唯一合法的字符是字母、数字和下划线“_”,标识符还不能以数字开头。


4
FYI:尽管这是非法的,但标准的gcc通常允许它们,详见http://gcc.gnu.org/onlinedocs/gcc/Dollar-Signs.html#Dollar-Signs。 - lothar
3
这是为了兼容老版本而设的。不应该在任何现代代码中使用。 - Martin York

13
在C++03中,之前给出的答案是正确的:它们是不合法的。然而,在C++11中情况发生了变化:
这里的答案是"可能":
根据§2.11的规定,标识符可以由数字和标识符非数字组成,以后者开头。标识符非数字通常是a-z、A-Z和下划线,此外,自C++11以来,它们还包括通用字符名称(例如\uBEAF、\UC0FFEE32)和其他实现定义的字符。因此,如果在标识符中使用$是允许的,则是实现定义的。VC10及以上版本支持此功能,较早版本可能也支持。它甚至支持像こんばんは这样的标识符。
但是:我不会使用它们。尽可能使标识符可读和可移植。$是实现定义的,因此不可移植。

8

虽然并不合法,但许多编译器都支持它们。需注意这可能取决于平台,因此在ARM架构上,gcc由于汇编限制不支持它们。


1
相关章节是“2.8 标识符 [lex.name]”。从基本字符集中,唯一有效的字符是 A-Z a-z 0-9 和 _。但是,像 é(U+00E9)这样的字符也是允许的。根据您的编译器,您可能需要将é输入为\u00e9。

0

在C++中它们是不合法的。然而,一些基于C/C++的语言(如Java和JavaScript)允许使用它们。


0

非法的。我认为美元符号和反引号是我键盘上唯一没有在C++中使用的标点符号("%"符号用于格式化字符串,这是通过参考C标准在C++中实现的)。


7
%也是取模运算符。 - RBerteig

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接