标准C语言的三字符组及替换拼写的分隔符

标准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

标准C语言的三字符组及替换拼写的分隔符的相关文章

C++001 有趣的三字符组

三字符序列表 转义前 转义后 ??= # ??( [ ??) ] ??/ ??< { ??> } ??' ^ ??! | ??- - 首先,我们来看一下两个程序段: 程序段1: int x = 1; //结果是多少?递增?????/ ++x; cout << x << endl; 程序段2: int x = 1; //结果是多少?递增?????/ ++x; cout << x << endl; 你能先把两个程序段的答案记在心里吗.稍后有用! 答案

正则表达式——字符组运算

以上介绍了字符组的基本功能,它们在常用的语言中都有提供:还有些语言中为字符组提供了更强大的功能,比如Java和.NET就提供了字符组运算的功能,可以在字符组内进行集合运算,在某些情况下这种功能非常实用. 如果要匹配所有的元音字母(为讲解简单考虑,暂时只考虑小写字母的情况),可以用[aeiou],但是要匹配所有的辅音字母却没有什么方便的办法,最直接的写法是[b-df-hj-np-tv-z],不但烦琐,而且难理解.其实,从26个字母中"减去"元音字母,剩下的就是辅音字母,如果有办法做这个&

C语言--一维数组,字符数组

#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { #pragma mark----------数组 //数组是容器,相同数据类型 //构造类型 // int a[3]={5,2,0}; //类型 // int[3]; //变量名 // a; //初值 // {5,2,0}; // int a[4] = {9,8,7,6}; // float b[6] = {2.5,3.14}; // char

C基础-标准C语言头文件

标准C语言头文件 ISO C标准定义的头文件(24项) <assert.h> 验证程序断言 <complex.h> 支持复数算术运算 <ctype.h> 字符类型 <errno.h> 出错码 <fenv.h> 浮点环境 <float.h> 浮点常量 <inttypes.h> 整型格式转换 <iso646.h> 替代关系操作符宏 <limits.h> 实现常量 <locale.h> 局部类

关于标准C语言的预定义宏【转】

标准C语言预处理要求定义某些对象宏,每个预定义宏的名称一两个下划线字符开头和结尾,这些预定义宏不能被取消定义(#undef)或由编程人员重新定义.下面预定义宏表,被我抄了下来. __LINE__  当前程序行的行号,表示为十进制整型常量__FILE__  当前源文件名,表示字符串型常量__DATE__转换的日历日期,表示为Mmm dd yyyy 形式的字符串常量,Mmm是由asctime产生的.__TIME__ 转换的时间,表示"hh:mm:ss"形式的字符串型常量,是有asctime

嵌入式Linux C语言(三)——指针与函数

嵌入式Linux C语言(三)--指针与函数 指针对函数的功能有巨大的贡献,指针能够将数据传递给函数,并且允许函数对数据进行修改.指针对于函数的作用主要有两方面:将指针传递给函数和声明函数指针. 一.程序的栈和堆 程序的栈和堆是C语言程序运行的运行时元素. 1.程序栈 程序栈是支持函数执行的内存区域,通常和堆共享一块内存区域,通常程序栈占据内存区域的下部,堆用内存区域的上部.程序栈存放栈帧,栈帧存放函数参数和局部变量.调用函数时,函数的栈帧被推倒栈上,栈向上长出一个栈帧,当函数终止时,函数的栈帧

嵌入式linux面试题解析(二)——C语言部分三

嵌入式linux面试题解析(二)--C语言部分三 1.下面的程序会出现什么结果#include <stdio.h>#include <stdlib.h> #include <string.h>void getmemory(char *p){    p=(char *) malloc(100);    strcpy(p,"hello world");}int main( ){    char *str=NULL;    getmemory(str); 

Object Pascal 语法之语言基础(三)

1.6 Object Pascal 的运算符 运算符是程序代码中对各种类型的数据进行计算的符号,通常分为算数运算符.逻辑运算符.比较运算符和按位运算符. 1.算术运算符Object Pascal 语言的算术运算符,如表1-9 所示.表1-9 Object Pascal 语言算术运算符 操作符 操作 操作数据类型 结果类型 + 加 整型.实型 整型.实型 - 减 整型.实型 整型.实型 * 乘 整型.实型 整型.实型 / 除 整型.实型 整型.实型 mod 取余 整型 整型 div 整除 整型 整

一起talk C栗子吧(第一百六十六回:C语言实例--大小写字符转换)

各位看官们,大家好,上一回中咱们说的是C语言中常量的例子,这一回咱们说的例子是:大小写字符转换.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,在程序中经常会用到英文字符,有时候需要把英文字符进行大小写转换.如何进行转换呢?接下来我们一起看看具体的转换方法. 大家都知道每个字符都有相应的ASIIC码,如果把一个字符的ASIIC码加上一个数值就变成了另外一个字符的ASIIC码.比如给字符a的ASIIC码加上1后就成了字符字符b的ASIIC码.基于这个原理,我们可以在小写字符的ASIIC