编译预处理是源代码在真正被全部gcc编译之前,编译器就要事先做的工作
宏定义
C提供了一种可以替换源代码中的字符串的机制
语法:#define 宏名(参数表) 宏值
不带参数宏定义
1 2 3 4
| #define PI 3.1415926 #define SIDE 10 #define AREA SIDE*SIDE #define PR printf("ethaniel\n");
|
带参数的宏定义
1 2
| #define MIX(a) (a) * (a) #define MAX(a,b) a>b?a:b
|
文本包含
文件目录:
header.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #ifndef HEADER_H #define HEADER_H
#include <stdio.h>
void pr();
#endif
|
main.c
1 2 3 4 5 6 7
| #include "header.h"
int main() { pr(); return 0; }
|
pr.c
1 2 3 4 5 6 7
| #include "header.h"
void pr() { printf("ethaniel\n"); return; }
|
条件编译
根据条件是否成立,来确定代码是否参与编译
(1)单分支
1 2 3
| #ifndef 条件 若干语句; #endif
|
(2)双分支
1 2 3 4 5
| #if 条件 若干语句1; #else 若干语句2; #endif
|
1 2 3 4 5
| #ifndef 条件 若干语句1; #else 若干语句2; #endif
|
(3)多分支
1 2 3 4 5 6 7 8 9 10 11
| #if 条件1 若干语句1; #elif 条件2 若干语句2; #elif 条件3 若干语句3; #elif 条件4 若干语句4; #elif 条件5 若干语句5; #endif
|
1 2 3 4 5 6 7 8 9 10 11
| #ifndef 条件1 若干语句1; #elif 条件2 若干语句2; #elif 条件3 若干语句3; #elif 条件4 若干语句4; #elif 条件5 若干语句5; #endif
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| #define AAA #include <stdio.h> int main() { #if 3>1 printf("a\n"); #endif
#ifndef AAA printf("e\n"); #else BBB printf("t\n"); #endif printf("-----\n"); return 0; }
|