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");

_ __ ___ ____

_____

_______

___________

_________

______

运行效果为:

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;

}

效果图

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

c语言中 d的用法,C语言中的#define用法总结相关推荐

  1. c语言中time函数作用,C语言中时间的基本用法小结

    前言 在我学的这些编程语言中,总是记不住它们的时间处理方式,每次用到时都要重新看,所以想着在这里记录下来,也方便用到时查找,也方便有需要的朋友们参考. time_t和struct tm 在C语言中用t ...

  2. c语言中fopen的作用,c语言fopen函数的用法

    在c语言中可以使用"fopen()"函数打开一个文件,该函数用于打开一个文件,其语法是"open("file a","r");&q ...

  3. ab 是什么意思C语言中,a/b在c语言中什么意思,c语言中ab是什么意思

    Q1:c语言中y=(x=a+b,b+c)代表什么意思 x=a+b表达式使得x=6,其返回值为X(x,b+c)是逗号表达式,逗号表达式的值为最后一个子表达式的值所以 y=b+c y=10 Q2:C语言中 ...

  4. c语言中0x11是多少,C语言中的符号

    C语言中的符号 运算符的种类C语言的运算符可分为以下几类: 1.算术运算符 用于各类数值运算.包括加(+).减(-).乘(*).除(/).求余(或称模运算,%).自增(++).自减(–)共七种. 2. ...

  5. c语言中fopen_s函数,关于C语言中从文件读取数据时,fopen,fopen_s和fscanf,fscanf_s的函数用法(函数的用法有很大区别)...

    首先这都是针对由于VS软件的设置,一些函数的需要在函数名后面加"_s"才能使用. (或者最直接的方法程序开头加#pragma warning(disable:4996) 就什么问题 ...

  6. c语言中 include math.h,C语言中的(#includestdio.h和#includemath.h)是什么意思?

    慕码人2483693 include 称为文件包含命令,其作用是把尖括号""或引号<>内指定的文件包含到本程序中,成为本程序的一部分,被包含的文件通常是由系统提供的,其 ...

  7. 素数在c语言表达能力,巧用C语言中的Continue语句解决数论中的问题

    .#0 福建电脑!""#年第$%期 巧用!语言中的!"#$%&'(语句解决数论中的问题 杨爱梅 !河南工业大学河南郑州"#$$#%& !摘要!运 ...

  8. c语言中 1ul什么意思,c语言 #define 中的UL

    c语言 #define 中的UL U和L是 整数文字量的后缀修饰,用于显示指明整数文字量的类型为unsigned int(U)和long int(L). 类似的还有浮点数文字量的后缀修饰F或f,用于指 ...

  9. 在c语言中char型数据在内存中的储存形式为什么

    在c语言中char型数据在内存中的储存形式为"ASCII码".在C语言中,将一个字符常量放到一个字符变量中,实际并不是把该字符本身放到内存单元中,而是将与该字符相对应的ASCII码 ...

最新文章

  1. 【数学专题】莫比乌斯反演与积性函数
  2. 思科——单臂路由与DHCP的结合
  3. python使用符号 表示单行注释-Python注释符号(多行注释和单行注释)用法详解...
  4. Windows驱动开发 - 设备对象初步学习
  5. cmd写java程序_用cmd写一个最简单的Java程序
  6. 在本地如何搭建虚拟主机(Appserver集成环境)
  7. 最近遇到的jsfl开发问题总结
  8. 滚动条颜色样式设置 说明
  9. LINUX下载编译libpng
  10. cic滤波器原理 MATLAB,cic滤波器(cic滤波器的原理和设计)
  11. blender 快捷键
  12. 感性电路电流计算_三相电的电功率的计算公式_200KW三相四线制线路,需要多少A电源空开?...
  13. 用java写新年快乐特效代码_蓝叶分享新年快乐大红灯笼特效代码
  14. 9大代理服务器软件的比较与分析之CCProxy、Squid
  15. 高德足迹地图在哪里_高德地图怎么点亮城市 足迹地图查看方法
  16. 关于《论文写作》课程的心得和体会
  17. C#模拟按键的一种实现方法
  18. 网站变灰,6行代码,通通变灰
  19. 【博客628】k8s pod访问集群外域名原理以及主机开启了systemd-resolved的不同情况
  20. VB.NET学习笔记:ADO.NET操作ACCESS数据库——ADO.NET数据访问接口

热门文章

  1. spring mvc基本概念
  2. 如何高效开发端智能算法?MNN 工作台 Python 调试详解
  3. 滨州学院计算机自荐考试题型,滨州学院2004—2005学年第一学期期末考试计算机科学教育专业02级《数据库原理》试题及答案(3份,另附习题集)...
  4. 1亿数据 redis 内存_redis 存1亿数据库
  5. Docker网络——实现容器间通信、容器与外网通信以及容器的跨主机访问
  6. 递归算法经典实例_掌握这10道经典面试算法题(含答案),攻克递归算法【程序员必备】...
  7. java 默认字符集 iso_第二篇:JAVA字符编码系列二:Unicode,ISO-8859-1,GBK,UTF-8编码及......
  8. uml 时序图_设计模式-UML
  9. ngrok服务器搭建_C/C++ Linux 后台服务器开发高级架构师学习知识路线总结
  10. python提取excel中的某几列数据-python-将excel中的某些列读取到数据框