预定义符号
__FILE__ //进行编译的源文件
__LINE__ //文件当前的行号
__DATE__ //文件被编译的日期
__TIME__ //文件被编译的时间
__STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义
这些预定义符号都是语言内置的。 举个栗子:
printf("file:%s line:%d\n", __FILE__, __LINE__);
#define
#define 定义标识符
语法:
#define name stuff
举个栗子:
#define MAX 1000 #define reg register //为 register这个关键字,创建一个简短的名字#define do_forever for(;;) //用更形象的符号来替换一种实现
#define CASE break;case //在写case语句的时候自动把 break写上
// 如果定义的 stuff过长,可以分成几行写,除了后一行外,每行的后面都加一个反斜杠(续行符)
#define DEBUG_PRINT printf("file:%s\tline:%d\t \
date:%s\ttime:%s\n" ,\
__FILE__,__LINE__ , \
__DATE__,__TIME__ )
在define定义时需要加上 ; 吗?
例如:
#define MAX 1000;
#define MAX 1000
建议不要加上“;”,这样容易导致问题,出现语法错误。
if(condition)
max = MAX;
else
max = 0;
#define 定义宏
#define 机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏(macro)或定义宏(define macro)。
下面是宏的申明方式:
#define name( parament-list ) stuff 其中的 parament-list 是一个由逗号隔开的符号表,它们可能出现在 stuff中。
注意: 参数列表的左括号必须与name紧邻。 如果两者之间有任何空白存在,参数列表就会被解释为stuff的一部 分。
下面引出一个宏定义:
#define SQUARE( x ) x * x
这个宏接收一个参数 x . 如果在上述声明之后,你把 SQUARE( 5 ); 置于程序中,预处理器就会用下面这个表达式替换上面的表达式:
5 * 5
但这个宏也存在着问题