预处理命令
#define
宏定义在C语言源程序中允许用一个标识符来表示一个字符串,称为“宏” ,被定义为“宏”的标识符称为“宏名”.在编译预处理时,对程序中所有出现的宏名,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”.宏定义是由源程序中的宏定义命令完成的,宏代换是由预处理程序自动完成的.编译器会在编译期间对所有的常量表达式(只包含常量的表达式)求值,预处理器不做计算,不对表达式求值,它只进行替换.
不带参数的宏定义
带参数的宏定义
宏定义的两种写法
#define MIN(A,B) ((A) < (B) ? (A) : (B))
#define MIN(A,B) ({ __typeof__(A) __a = (A); __typeof__(B) __b = (B); __a < __b ? __a : __b; })
拓展
#define和函数的区别
#include
#include 预处理指令用于包含文件,有两种常见的语法形式:<> 和 “”
<> 包含形式:#include
这种形式的 #include 是用于包含标准库头文件,编译器会在系统默认的库路径中查找该头文件。例如,#include <stdio.h> 用于包含 C 标准库中的 stdio.h 头文件。通常,系统提供的标准库头文件使用 <> 形式。
“” 包含形式:#include “header”,用于包含用户自定义的头文件。
这种形式的 #include 是用于包含用户自定义头文件,编译器会先在当前源文件所在目录中查找该头文件,然后再在编译器指定的其他路径中查找。例如,#include “myheader.h” 用于包含用户自定义的头文件 myheader.h。通常,用户自定义的头文件使用 “” 形式。
#if~ #else ~#eif ~#endif
#ifdef~#ifndef
#line
#error
#pragma