C/C++中 宏定义字符串 操作
关于记号粘贴操作符(token paste operator): ##
1. 简单的说,“##”是一种分隔连接方式,它的作用是先分隔,然后进行强制连接。
其中,分隔的作用类似于空格。我们知道在普通的宏定义中,预处理器一般把空格
解释成分段标志,对于每一段和前面比较,相同的就被替换。但是这样做的结果是,
被替换段之间存在一些空格。如果我们不希望出现这些空格,就可以通过添加一些
##来替代空格。
另外一些分隔标志是,包括操作符,比如 +, -, *, /, [,], …,所以尽管下面的
宏定义没有空格,但是依然表达有意义的定义: define add(a, b) a+b
而其强制连接的作用是,去掉和前面的字符串之间的空格,而把两者连接起来。
2. 举列 – 试比较下述几个宏定义的区别
#define A1(name, type) type name_##type##_type 或
#define A2(name, type) type name##_##type##_type
A1(a1, int); /* 等价于: int name_int_type; */
A2(a1, int); /* 等价于: int a1_int_type; */
解释:
1) 在第一个宏定义中,”name”和第一个”_”之间,以及第2个”_”和第二个
”type”之间没有被分隔,所以预处理器会把name_##type##_type解释成3段:
“name_”、“type”、以及“_type”,这中间只有“type”是在宏前面出现过
的,所以它可以被宏替换。
2) 而在第二个宏定义中,“name”和第一个“_”之间也被分隔了,所以
预处理器会把name##_##type##_type解释成4段:“name”、“_”、“type”
以及&ldq
相关文档:
1、快速初始化
char *str = new [size];
str[0]='\0';
2、memcpy的妙用
试题6:已知WAV文件格式如下表,打开一个WAV文件,以适当的数据结构组织WAV文件头并解析WAV格式的各项信息。
WAVE文件格式说明表
偏移地址 字节数 数据类型 内 容
文件头
00H 4 Char "RIFF"标志
......
C/S又称Client/Server或客户/服务器模式。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或 SQL Server。客户端需要安装专用的客户端软件。
B/S是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser),如Netscape Navigator或Internet Explorer,服务器安装O ......
symbian有自己的一套库。要好的成型的C代码,比如前两天为了解析XML我引用到的tinyxml。所以在symbian下引用C标准库就非常重要,这是对以前代码非常好的移植方式。
为了能用C标准库,主要修改mmp文件中的路径和库配置。添加如下两行,就可以用C标准库了。
SYSTEMINCLUDE /epoc32/include/stdapis
LIBRARY ......
尽管 Lua 的关键词的设计,运行符的设计,语法的设计等方面与 C 很相似,但我们还要注意其明显不同的地方。
条件判断时的真假条件
Lua 中所有的值都可以作为条件。在控制结构的条件中除了 false 和 nil 为假,其他值都为真。所以 Lua 认为 0 和 空串 都是真。
而 C 中,认为只要是在内存中表现为 0 值的符号都为假。
字 ......