C语言零碎知识点
C语言零碎知识点
1.编译预处理
2.宏定义:标识符代替字符串;分为有参数和无参数
3.#undef:删除前面定义的宏的名字。
4.无参宏:宏名后不带参数,一般形式:#define 标识符 字符串 ①宏定义不是说明或语句,在行末不必加分号,如加上分号则连分号一起置换;②宏定义必须写在函数之外,其作用域为宏定义命令起到源程序结束。如要终止其作用域可使用#undef命令;③宏名在源程序中若用引号括起来,则预处理程序不对其作宏带换;④宏定义允许嵌套,在宏定义的字符串中可以使用已经定义的宏名。在宏展开时由预处理程序层层代换。⑤习惯上宏名用大写字母表示,以便于与变量区别。⑥宏定义只是简单的字符串代换,是在预处理完成的,而typedef是在编译时处理的,它不是作简单的代换,而是对类型说明符重新命名。
5.带参宏定义:#define 标识符 字符串(含有参数)
#define M(y) (y*y + 3*y)①宏名和参数表之间不能有空格出现;②形式参数不分配内存单元因此不必做类型定义只是符号代换,不存在值传递的问题;③形参是标识符,实参可以是表达式;④形参通常要用括号括起来以避免出错;
6.文件包含:把指定的文件插入该命令行位置取代该命令行,从而把指定的文件和当前的源程序文件连成一个源文件。
1、#define
命令#define定义了一个标识符及一个串。在源程序中每次遇到该标识符时,均以定义的串代换它。ANSI标准将标识符定义为宏名,将替换过程称为宏
替换。命令的一般形式为:
#define identifier string
注意:
1该语句没有分号。在标识符和串之间可以有任意个空格,串一旦开始,仅由一新行结束。
2宏名定义后,即可成为其它宏名定义中的一部分。
3宏替换仅仅是以文本串代替宏标识符,前提是宏标识符必须独立的识别出来,否则不进行替换。例如:#define XYZ
this is a test,使用宏printf("XYZ");//该段不打印"this is a test"而打印"XYZ"。因为预编译器识
别出的是"XYZ"
4如果串长于一行,可以在该行末尾用一反斜杠' \'续行。
下一篇: c++中使用类定义自己的数据类型