1、宏定义
#define TRUE 1
#define PI 3.14
#define MYNAME "Damon"
宏可以定义 整型 ,浮点型,字符型,字符串类型。
2、_FILE_预处理常量
#include
void main(void)
{
printf("The file %s is under Beat testing",_FILE_); //_FILE_就是文件名字
}
3、_LINE_预处理命令常量
对于大型的项目有时需要预处理器知道当前源文件的当前行号
#include
void main(void)
{
printf("The Program run to line %d",_LINE_); //_LINE_就是运行的行数
}
4、改变预处理器的行数
在C语言中提供了#line的预处理,准许用户改变当前行数,下面预处理器将行数定位于100行
#line 100
#line 1 "FILENAME.C"
chag_line.c说明了#line的用法
#include
void main(void)
{
printf("File %s: Successfully reachedto line %d",_FILENAME_,_LINE_); //_LINE_就是运行的行数
#line 100 "FILENAME.C"//改变源文件的名称
printf("File %s: Successfully reachedto line %d",_FILENAME_,_LINE_); //_LINE_就是运行的行数
}
运行结果:
File chag_line.c:Successfully reached line 6
File FILENAME.c:Successfully reached line 102
5、生成无条件预处理错误
#error The routine string_sort now uses far strings
6、记录预处理时间
#include
void main(void)
{
printf("Beat Testing : Last compiled %s %s",_DATE_,_TIME_);
}
7、判断是否是ANSI C编译
#include
void main(void)
{
#ifdef _STDC_
printf("ANSI C compliance\n");
#else
printf("Not in ANSI C mode");
#endif
}
8、判断是否用的C++
#include
void main(void)
{
#ifdef _cplusplus
printf("Using C++\n");
#else
printf("Using C\n");
#endif
}
9、取消宏或者常量
#undef _toupper
#defne _toupper(c) ((((c)>='a')&&((c)<='z')) ? (c) -'a'+'A':c)
10、比较宏与函数
如果比较注重效率和速度,就用宏,如果比较在乎程序大小就用函数。
11、预定义的值和宏都在include的目录下,可以好好参考下。
12、#include
#include“my.h” 引号是从当前的目录下找到头文件,而“<>”是在头文件的子路录下找。
13、如何判断符号是否已定义
#ifdef symbole
//statement
#endif
#ifndef symbole
//statement
#endif
14、进行if —— else预处理
#ifdef _MSC_VER
printf("Microsoft");
#endif
#ifdef _BORLANDC_
printf(“Borland”);
#endif
15、预处理可以像if else 一样可以嵌套 进行条件筛选。
#if defined(MY_LIBRRARY)
//Statement
#else if defined (MY_RSOUTINES)
//Statement
#else
//Statement
#endif
16、定义多行的宏和常量
#define very_long_character_string "This extremely long string
constant\
requires tow lines "
用反斜杠来做连接符。
17、在宏定义中不要放分号,也不要随意放置空格。
18、自建宏
#define SUM(X,Y) ((X)+(Y)) //不能加分号。
#define MIN(x,y) ((x)<(y)?(x):(y))
#define MAX(x,y) ((x)>(y)?(x):(y))
19,作为规则宏参数一定放在括号里。