编译预处理指令#define详解

编译预处理指令#define详解,第1张

编译预处理指令#define详解
  • 1.#define基本性质
  • 2.#define定义宏
    • (1)#define定义普通宏
    • (2)#define定义带参数的宏
    • (3)预定义的宏

1.#define基本性质
  • #define <名字> <值>
  • define定义宏时,如果一个宏的值中有其他宏的名字,也是会被替换的
#define PI 3.1415926
#define PI2 2*PI
  • 注意没有结尾的分号,因为不是C的语句

  • 名字必须是一个单词,值可以是各种东西

  • #开头的是编译预处理指令,它们不是C语言的成分,但是C语言程序离不开它们

  • 在C语言的编译器开始编译之前,编译预处理程序会把程序中的名字换成值,它是完全的文本替换

  • 如果一个宏的值超过一行,最后一行之前的行末需要加 \

  #define exchange(a,b) { \
    	int t;\
    	t=a;\
    	a=b;\
    	b=t;\
    }
  • 宏的值后面出现的注释不会被当作宏的值的一部分
2.#define定义宏 (1)#define定义普通宏
//define定义一个普通宏,MAX是这个宏的名字,1000是这个宏的值
#define MAX 1000
(2)#define定义带参数的宏

宏可以带参数,可以带多个参,也可以组合(嵌套)使用其他宏。

#define MAX 1000
#define ADD(x, y) ((x)+(y))

#include 

int main()
{
	int sum = MAX * ADD(2, 3);
  printf("sum = %d\n", sum);//5000
  return 0;
}

带参数的宏的原则: 整个值要括号,参数出现的每个地方都要括号

#define RADTODEG(x) ((x) * 57.29578)

错误定义的宏:

 #define RADTODEG(x) (x * 57.29578)
 #define RADTODEG(x) (x) * 57.29578
(3)预定义的宏

• LINE 表示进行编译的当前文件当前所在的行号。


• FILE 表示进行编译的源文件所在目录。


• __DATE__表示当前文件被编译的日期。


• TIME 表示⽂件被编译的时间,精确到秒。


• STDC 表示如果编译器遵循ANSI C,其值为1,否则未定义 。

#include 

int main(int argc,char const *argv[])
{
	printf("%s:%d\n",_FILE_,_LINE_);
	//  /Users/wengkai/cc,5
	printf("%s,%s\n",_DATE_,_TIME_);
	//   Aug 3 2014,14:08:45
	return 0;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/674930.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-19
下一篇 2022-04-19

发表评论

登录后才能评论

评论列表(0条)

保存