C语言预处理详解

预定义符号 

__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

但这个宏也存在着问题,不知大家发现了吗?

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值