以下变量名在Xcode中全部有效(编译器构建它们时无需考虑第二个问题)。
NSString * ª_name = @"something";
NSString * ø_name = @"something";
NSString * ƒ_name = @"something";
NSString * Ç_name = @"something";
NSString * ç_name = @"something";
NSString * º_name = @"something";
NSString * ı_name = @"something";
NSString * ·name = @"SHIFT+OPTION+9"; // Personal favourite
NSString * π_name = @"something";
NSString * æ_name = @"something";
是否有一个列表,我可以看到所有的有效字符,我可以使用的变量名?
编辑:他们中的许多人仍然愚弄Xcode索引实际上。所以最好坚持使用好的下划线。:)
2条答案
按热度按时间hyrbngr71#
C90允许在标识符中使用63个众所周知的ASCII字符:拉丁文大写和小写字母、数字和下划线。
从C99开始,新版本的clang和gcc都支持“扩展标识符”的概念。The C99 standard在附录D中包含了一个允许的“通用字符”列表。它有点长,所以我只复制拉丁语范围:
00AA、00BA、00C0−00D6、00D8−00F6、00F8−01F5、01FA−0217、0250−02A8、1E00−1E9B、1EA0−1EF9、207F
您最喜欢的“中间点”(我也喜欢)可以在“特殊字符”中找到:
00B5、00B7、02B0−02B8、02BB、02BD−02C1、02D0−02D1、02E0−02E4、037A、0559、093D、0B3D、1FBE、203F−2040、2102、2107、210A−2113、2115、2118−211D、2124、2126、2128、212A−2131、第2133 - 2138号、第2160 - 2182号、第3005 - 3007号、第3021 - 3029号
8yoxcaq72#
您的源代码实际上是“实现定义的”
所以当你写作时
一个特定的编译器可能会阻塞,它不再是可移植的,也不能保证它在下一个版本中工作。
根据C11,§6.4.2标识符
2标识符是一个非数字字符(包括下划线_、小写和大写拉丁字母以及其他字符)和数字的序列,用于指定6.2.1中所述的一个或多个实体。小写和大写字母不同。对标识符的最大长度没有具体限制。
3标识符中的每个通用字符名应指定ISO/IEC 10646中编码福尔斯D.1.71中规定的范围之一的字符)首字符不应是指定编码属于D.2中规定的范围之一的字符的通用字符名。一种实现可以允许不是基本源字符集的一部分的多字节字符出现在标识符中;哪些字符及其与通用字符名称的对应关系由实现定义。
(强调我的)
在GCC文档中,我们可以阅读
11.1实现定义的行为
C和C标准允许标识符由“_”和字母数字字符组成。C和C99也允许通用字符名称,C99还允许实现定义的字符。GCC目前只允许使用-fextended-identifier的通用字符名称,因为在标识符中实现通用字符名称还处于实验阶段。
请注意,* 通用字符名称 * 定义为