c语言define的作用,C语言中的#define用法小结

C语言中的#define用法总结

1、宏定义

格式:

#define   标识符(也称为宏名)   替换列表

例如;

#define PI 3.14

以上代码就是定义了一个宏。  宏的名称为PI, 我们在使用的时候,会在编译预处理时,将代码中的PI替换为3.14

注意: 没有 分号

    printf("pi = %f \n", PI);//结果为  pi = 3.14其实,就是进行了简单的替换而已。那么我们可以利用这个特性,进行代码混淆。

2、可以进行代码混淆

#include

#include

#include

#define _int

#define __ main

#define ___ (

#define ____ )

#define _____ {

#define ______ }

#define _______ printf("Hello C\n");

#define _________ return 0;

#define ___________ system("pause");

_ __ ___ ____

_____

_______

___________

_________

______运行效果为:

084809911.png

3、带参数的宏

格式:

#define   标识符(参数列表)   替换列表

例如:

#define MAX(a,b) ((a)>(b)?(a):(b))int nNum = MAX(3,4);   // 会替换为 int nNum = ((3)>(4) ? (3) : (4) )注意:每个参数都要单独的加上小括号(),否则会出现一些问题

4、当宏定义一个很长的字符串的时候

#define STRTING "andfdsafdsafdsafdsafdsafdsfdsafdasfdsafdafdsafdsafasdfffffffffffffffffffffffffffffffffffffffffffffffffff" 如果我们这么去定义,未尝不可,但是要是1w个字符呢?这样定义就有待商榷了,加上从风格来说也不是很好。

那遇到该问题我们如何解决------------------使用  \ 即可,   在每一个换行的时候加上一个 \

#define STRTING "andfdsafdsafdsafdsafdsafdsfdsafdasfdsaf"\ "dafdsafdsafasdfffffffffffffffffffffffff"\ "ffffffffffffffffffffffffff"5、取消宏   格式:#undef 宏名

//会自动添加上双引号

#define mprint(m) printf("%s = %d \n", #m, m)

int main()

{

int nNumA = 12;

#undef mprint(m) //取消宏定义 此行一下 都不能再使用 mprint(m) 宏

//mprint(nNumA); //此时 会报错

system("pause");

return 0;

}

6、宏定义中 # 的作用,会将使用的参数自动添加上  双引号。

int nNumA = 12;我们想输出的效果为  nNumA = 12;如果直接使用

printf("%s = %d \n", nNumA, nNumA);这样是实现不了我们想要的效果的,接下来 我们使用 宏定义

#include

#include

#include

//会自动添加上双引号

#define mprint(m) printf("%s = %d \n", #m, m)

int main()

{

int nNumA = 12;

//我们想输出的效果为 nNumA = 12;

//printf("%s = %d \n", nNumA, nNumA); //这样是实现不了我们想要的效果的

mprint(nNumA);

system("pause");

return 0;

}效果图

084809912.png

7、系统预定义的宏

在C语言中收录了一些有用的宏,这些宏是提供当前编译信息的。

__LINE__         被编译文件的行数(整型)

__FILE__   被编译文件的名字 (字符型)

__DATE__   编译日期 (字符型)

__TIME__   编译时间 (字符型)

__STDC__   如果编译器接受标准C,那么值为1. (整型)

8、条件编译

有三种情况

如果标识符被定义过    #ifdef

#ifdef 标识符

/*程序段1*/

#else

/*程序段2*/

#endif

如果标识符未被定义过 #ifndef----里面有个n#ifndef 标识符

/*程序段1*/

#else

/*程序段2*/

#endif

根据表达式判定

#if   表达式

/*程序段1*/

#else

/*程序段2*/

#endif

版权声明:本文为博主原创文章,未经博主允许不得转载。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值