C+中的标识符是否允许使用美元符号+;03? > C++标准在标识符中使用美元符号时说什么,例如 hello $Word < /C>?它们合法吗?
它们是非法的。标识符中唯一的合法字符是字母、数字和_。标识符也不能从数字开始。 它们在C++中是不合法的。然而,一些C/C++派生语言(如java和JavaScript)确实允许它们。< P> C++标识符可以由以下任何一种组成:(下划线)、数字0~9、字母A Z(上下两种情况),不能以数字开头。C+中的标识符是否允许使用美元符号+;03? > C++标准在标识符中使用美元符号时说什么,例如 hello $Word < /C>?它们合法吗?,c++,identifier,C++,Identifier,它们是非法的。标识符中唯一的合法字符是字母、数字和_。标识符也不能从数字开始。 它们在C++中是不合法的。然而,一些C/C++派生语言(如java和JavaScript)确实允许它们。< P> C++标识符可以由以下任何一种组成:(下划线)、数字0~9、字母A Z(上下两种情况),不能以数字开头。 C99允许对标准进行扩展(例如),因此有许多例外情况。非法。我认为美元符号和背景是我的键盘上唯一的标点符号,在C++中没有使用(“%”符号是格式字符串,在C++中引用C标准)。不合法,但是如果不是大多
C99允许对标准进行扩展(例如),因此有许多例外情况。非法。我认为美元符号和背景是我的键盘上唯一的标点符号,在C++中没有使用(“%”符号是格式字符串,在C++中引用C标准)。
不合法,但是如果不是大多数编译器支持,很多人都会注意到这一点,注意这可能取决于平台。因此,由于装配限制,arm上的gcc不支持它们。
相关部分为“2.8标识符[lex.name]”。从基本字符集中,唯一有效的字符是A-Z A-Z 0-9和Z。然而,像é(U+00E9)这样的字符也是允许的。但是,根据编译器的不同,您可能需要以\u00e9的形式输入é。在C++03中,前面给出的答案是正确的:它们是非法的。然而,情况发生了变化: 这里的答案是“可能”:根据§2.11,标识符可以由数字和非数字标识符组成,从后者之一开始。非数字标识符通常是
a-z
、a-z
和下划线,此外,由于C++11,它们还包括通用字符名(例如\uBEAF
、\UC0FFEE32
)、和其他实现定义的字符。因此,如果允许在标识符中使用$
,则它是实现定义的。VC10和更高版本也支持这一点,可能是更早的版本。它甚至支持こんばんは代码>
但是:我不会用它们。使标识符尽可能可读和可移植<代码> $是定义的实现,因此不是可移植的。%也是模数操作符。这是愚蠢的,它允许在VS中总是要对标准进行自己的扩展…每个主要的C++编译器都有很多扩展。MS在这方面不是唯一的。GCC也允许美元符号。你误解了附录E-(规范)“标识符通用字符名”[扩展id]。但是,这会添加更多的字母(重音或来自不同的脚本),而不是像$这样的符号。请注意,这仅适用于C++03。C++ 11允许在标识符中通用字符名称和实现定义的字符。@ ZIFRE:我相信他是专门询问C++标准的,因为不是所有编译器都符合100%标准,有些则有自己的扩展,使其合法。C99标准明确允许平台定义附加的法律。标识符字符。PDP11和VAX的Decus C编译器都允许$,因为大多数系统调用的名称中都包含$。“美元预留给数字”。我没有更旧的C标准或手边的C++标准来检查是否符合标准……ZIFRE:你的评论是否更需要?因为你需要问,不,他不能在他最喜欢的编译器中简单地尝试它,因为这会告诉他编译器是否允许它,而不是语言是否允许。在C++中,这是一个重要的区别。FIY:尽管标准GCC非法,通常允许它们,但这是允许向后兼容性的。它不应用于任何现代代码。