标准C语言中包括一组三字符组,使C语言程序可以只用ISO
646-1083不变代码集编写,这是七比特ASCII代码集的子集,是许多非英语国家字符集公用的代码集。三字符组以两个连续问号开头,见上图。标准C语言还提供一些记号的重拼和定义一些运算符的宏替换的头文件<iso646.h>,但与三字符组不同的是,这些替换无法在字符串型常量和字符型常量中识别。
源程序中三字符组的转换发生在词法分析(转换为记号)之前和识别字符串型常量和字符型常量中的转义字符之前。标准C语言只能识别以上9个三字符组,所有其他字符序列(如??&)不进行转换。新的转义字符\?可用于防止对类似于三字符组的字符序列进行解释。
为了帮助编程人员使用没有某些美语或英语字符的I/O设备,替换拼写<%、%>、<:、:>、%:、%:%:分别等价于分隔符{、}、[、]、#、##,见下图。
如下例子,分隔符使用的两种形式的结果是一样的:
// main.c #include <stdio.h> #define SEASON(season) "Season is: "#season #define MONTH(month) "Month is: "%:month #define ADHERE(one, two) one##two #define LINK(one, two) one%:%:two int main(void) { char arr[] = {'a', 'b'}; char arr2<::> = <%'c', 'd'%>; printf("%c, %c\n", arr[0], arr[1]); // a, b printf("%c, %c\n", arr2<:0:>, arr2<:1:>); // c, d printf("%s\n",SEASON("Summer")); // Season is: "Summer" printf("%s\n",MONTH("April")); // Month id: "April" printf("%d\n", ADHERE(1, 2)); // 12 printf("%d\n", LINK(3, 4)); // 34 return 0; }
时间: 2024-10-05 05:21:57