设为首页 加入收藏

TOP

C语言中的宏定义
2014-11-24 12:16:27 来源: 作者: 【 】 浏览:0
Tags:言中 定义

C语言中的宏定义也叫做预处理命令,预处理命令是C语言本身的组成部分,不能直接对它们进行编译。


1.基本概念;


1>预处理不是C语句,是在编译前进行的


2>预处理功能主要用于下3种情况:


宏定义


文件包含


条件编译


3>宏是在编译前进行的,程序不能直接对它们进行编译,由预处理程序先进行替换。


说明:


一个预处理命令占用一个单独的行,命令末尾不使用分号作为结束符。


宏定义是专门用于预处理命令的一个专用名词,它与定义变量的含义不同,它只做字符替换,不分配内存空间。


2.不带参数的宏


1>用一个指定的标识符(即名字)来代替一个字符串,它的一般形式为


#define 标识符 字符串


Eg:


#define MAX_NUM 100


它的作用是在本程序文件中使用指定的标识符MAX_NUM来替代 100这个字符串。


2>宏定义是用宏名代替一个字符串,也就是做简单的置换,不做正确性检查。(预编译时不做任何语法检查,只有在编译已被宏展开后的源程序时才会发现语法错误并报错)


3>宏定义不是C语句,不必在行末加分号。如果加了分号则会连分号一起进行替换


4>#definde出现在A处,则宏名的有效范围为定义命令之后到本源文件之后到本源文件结尾。


5>可以通过#undef命令终止宏定义的作用域.


#define MAX_NUM 100;


Void main()


{


……………………. MAX_NUM的作用范围


………………….


};


#undedf MAX_NUM


f()


{


………………………….


…………………………


}


说明:当解除宏定义时,只需要指出宏标识符而不必给出后面的字符串。


6>在进行宏定义时,可以引用已定义的宏名,可以层层置换(即宏可以嵌套)


#define PI 3.141596


#define R 3.0


#define L 2*PI*R


#define S PI*R*R


7>对程序中使用双引号括起来的字符串,即使与宏名相同,也不进行置换。


eg;


printf(“L =%f\n,s=%f\n”,L,S);


在printf中双引号内的L不进行替换,双引号外的进行替换。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇嵌入式C语言编程小知识 下一篇C函数之memset()函数用法

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Redis 分布式锁全解 (2025-12-25 17:19:51)
·SpringBoot 整合 Red (2025-12-25 17:19:48)
·MongoDB 索引 - 菜鸟 (2025-12-25 17:19:45)
·What Is Linux (2025-12-25 16:57:17)
·Linux小白必备:超全 (2025-12-25 16:57:14)