宏定义#define

发布于:2023-01-10 ⋅ 阅读:(503) ⋅ 点赞:(0)

目录

1 有值的宏

2 没有值的宏

3 带参数的宏


1 有值的宏

以#开头的语句是编译预处理语句,不参与代码的编译。例如#define语句就是一个宏定义语句。宏定义有一些特点:

语法:#define <名字> <值>

(1)该语句没有分号,因为不属于代码一部分。该代码不参与编译,在编译前就把代码中所以的名字替换成值(存文本替换);

(2)名字必须是一个单词,值可以是任何东西;

(3)宏中可以包含其他宏;

(4)  宏后的注释不属于宏;

(5)宏可以用/换行;

调试代码如下所示:

#include<stdio.h>
#define pi 3.141592
#define pi_plus_1 pi+1
#define output printf("pi=%lf\n",pi);\
                printf("pi_plus_1=%lf",pi_plus_1)
void main(void)
{
   output;
}

运行结果为:

pi=3.141592
pi_plus_1=4.141592

2 没有值的宏

一般用来条件编译,例如定义一个#define debug,在代码以后来判断有没有定义过这个宏,如果有,编译代码段1,如果没有,编译代码段2。

C语言中有一些内置的宏定义分别是:

__FILE__//替代文件名称

__LINE__//替代代码所在行

__DATE__//替代日期

__TIME__//替代时间

实例代码:

#include<stdio.h>

void main(void)
{
    printf("本代码的文件名是:%s\n",__FILE__);
    printf("本语句的行序号是:%d\n",__LINE__);
    printf("当前时间是:%s %s",__DATE__,__TIME__);
}

运行结果为:

本代码的文件名是:hong2.c
本语句的行序号是:6
当前时间是:Aug 18 2022 19:40:04

3 带参数的宏

宏亦可以带上参数,如下代码所示:

#include<stdio.h>
#define cube(x) ((x)*(x)*(x))

void main(void)
{
    printf("%d",cube(3));
}

此时,宏定义的名字类似于函数名,值类似于函数表达式。不同的是,此处的宏依然是纯文本替代。为了避免出现运算优先级的问题,进行带参数的宏定义的时候需要在所有有参数的地方加上(),最后还要将整个值加上括号。

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到