-
一、变量式宏定义(Oject-like Macro)宏只是进行简单的字符串替换: #define N 20 #define STR "hello, world\n" 二、函数式宏定义(Function-like Macro) 宏可以类似函数一样使用: #define MAX(a, b) ((a)…
发布日期:2013-11-05 23:05:19
-
预处理还需要运算符?有没有搞错?^_^, 没有搞错,预处理是有运算符,而且还不止一个: # (单井号) —— 字符串化运算符。 ## (双井号 )—— 连接运算符 #@ &…
发布日期:2013-11-05 23:05:01
-
预处理指令是以#号开头的代码行。#号必须是该行除了任何空白字符外的第一个字符。#后是指令关键字,在关键字和#号之间允许存在任意个数的空白字符。整行语句构成了一条预处理指令,该指令将在编译器进行编译之前对源代码做某些转换。下面是部分预处理指令:#:空指令,无任何效果#include:包含一个源代码文件#define:定义宏#undef:取消已定义的宏#if:如果给定条件为真,则编译下面代码#ifdef:…
发布日期:2013-11-05 23:04:39
-
预处理功能是C语言特有的功能,它是在对源程序正式编译前由预处理程序完成的。程序员在程序中用预处理命令来调用这些功能。宏定义是用一个标识符来表示一个字符串,这个字符串可以是常量、变量或表达式。在宏调用中将用该字符串代换宏名。宏定义可以带有参数,宏调用时是以实参代换形参。而不是“值传送”。为了避免宏代换时发生错误,宏定义中的字符串应加括号,字符串中出现的形式参数两边也应加括号。文件包含是预处理的一个重要…
发布日期:2013-11-05 23:04:21
-
预处理程序提供了条件编译的功能。可以按不同的条件去编译不同的程序部分,因而产生不同的目标代码文件。这对于程序的移植和调试是很有用的。条件编译有三种形式,下面分别介绍:一、第一种形式:#ifdef 标识符 程序段1#else 程序段2#endif它的功能是,如果标识符已被 #define命令定义过则对程序段1进行编译;否则对程序段2进行编译。如果没有程序段2(它为空)…
发布日期:2013-11-05 23:04:06
-
文件包含是C预处理程序的另一个重要功能。文件包含命令行的一般形式为: #include"文件名"在前面我们已多次用此命令包含过库函数的头文件。例如: #include"stdio.h" #include"math.h"文件包含命令的功能是把指定…
发布日期:2013-11-05 23:03:24
-
9.1.1带参宏定义C语言允许宏带有参数。在宏定义中的参数称为形式参数,在宏调用中的参数称为实际参数。对带参数的宏,在调用中,不仅要宏展开,而且要用实参去代换形参。带参宏定义的一般形式为: #define 宏名(形参表) 字符串在字符串中含有各个形参。带参宏调用的一般形式为: 宏名(实参表); 例…
发布日期:2013-11-05 23:03:07
-
在C语言源程序中允许用一个标识符来表示一个字符串,称为“宏”。被定义为“宏”的标识符称为“宏名”。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的。在C语言中,“宏”分为有参数和无参数两种。下面分别讨论这两种“宏”的定义和调用。9.1.1无参宏定义无参宏的宏名后不带…
发布日期:2013-11-05 23:02:49
-
在前面各章中,已多次使用过以“#”号开头的预处理命令。如包含命令#include,宏定义命令#define等。在源程序中这些命令都放在函数之外,而且一般都放在源文件的前面,它们称为预处理部分。所谓预处理是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所作的工作。预处理是C语言的一个重要功能,它由预处理程序负责完成。当对一个源文件进行编译时,系统将自动引用预处理程序对源程序中的预处理部分作处理,处…
发布日期:2013-11-05 23:02:32