c语言define的用法

c语言define的用法1 define 的简单定义作用 define 相当于一个简单的文本替换 对于普通的常量定义 我就不必多说了 但是对于类似于函数定义的形式 可能会出现错误 例如 defineAdd x y x y 用到代码中时会出现问题 比如计算式子 c Add x y d 本意是计算出 x 与 y 的和之后在分别与 c d 做乘积 可是因为 define 仅仅相当于一个简单的文本替换 所以真实的计算

 

1#define的简单定义作用

#define相当于一个简单的文本替换,对于普通的常量定义,我就不必多说了,但是对于类似于函数定义的形式,可能会出现错误,例如:

#define Add(x,y) x+y

用到代码中时会出现问题,比如计算式子c*Add(x,y)*d,本意是计算出xy的和之后在分别与cd做乘积,可是因为#define仅仅相当于一个简单的文本替换,所以真实的计算是c*x + y*d;这样的话就出现错误了!

2#define可以进行多行代码的定义,只需要在每行的末尾加上“\”符号即可,例如:

#define   MACRO(arg1,   arg2)   do   {   \

  \

stmt1;   \

stmt2;   \

  \

}   while(0) 

3、用#define实现条件编译,在大型的项目之中,需要通过条件编译来选择不同的编译环境,例如:

#ifdef   WINDOWS

……

……

#endif

#ifdef   LINUX

……

……

#endif

 

可以在编译的时候通过#define设置编译环境

4、如何定义宏、取消宏

//定义宏

#define   [MacroName]   [MacroValue]

//取消宏

#undef   [MacroName]

普通宏

#define   PI   (3.)

 

带参数的宏

#define   max(a,b)   ((a)> (b)?   (a),(b))

关键是十分容易产生错误,包括机器和人理解上的差异等等。

5、条件编译

#ifdef   XXX…(#else)   …#endif

例如   #ifdef   DV22_AUX_INPUT

#define   AUX_MODE   3

#else

#define   AUY_MODE   3

endif

#ifndef   XXX   …   (#else)   …   #endif

6、头文件(.h)可以被头文件或C文件包含;

重复包含(重复定义)

由于头文件包含可以嵌套,那么C文件就有可能包含多次同一个头文件,就可能出现重复定义的问题的。

通过条件编译开关来避免重复包含(重复定义)

例如

#ifndef   __headerfileXXX__

define   __headerfileXXX__

文件内容

#endif

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/232994.html原文链接:https://javaforall.net

(0)
上一篇 2025年8月25日 下午7:01
下一篇 2025年8月25日 下午7:22


相关推荐

  • 多线程编程 -wait(),notify()/notityAll()方法

    多线程编程 -wait(),notify()/notityAll()方法

    2021年5月6日
    123
  • JavaScript d3使用指南

    JavaScript d3使用指南JavaScriptd3使用指南1.如何在项目中使用d3:如果是要在网站上使用d3效果的话,那么可以直接在script中引用官方直接给的网络库<scriptsrc=”https://d3js.org/d3.v5.js”></script>如果要在本地运行或者调试,亦或者自己搭建服务器,可以直接下载到本地进行使用。<script>src=”path/…../d3.js”</script>(这个script可以单独成行)官网:

    2025年7月31日
    4
  • 线性插值 多项式插值 样条插值 牛顿插值总结

    线性插值 多项式插值 样条插值 牛顿插值总结1 什么是插值在数值分析中 插值 interpolatio 是一种通过已知的 离散的数据点 在范围内推求新数据点的过程或方法 求解科学和工程的问题时 通常有许多数据点借由采样 实验等方法获得 这些数据可能代表了有限个数值函数 其中自变量的值 而根据这些数据 我们往往希望得到一个连续的函数 也就是曲线 或者更密集的离散方程与已知数据互相吻合 这个过程叫做拟合 与插值密切相关的另一个问题是通过

    2026年3月17日
    2
  • mysql timestamp[通俗易懂]

    mysql timestamp[通俗易懂]一般建表时候,创建时间用datetime,更新时间用timestamp。这是非常重要的。【1】timestamp字段所在行更新时,timestamp字段会被更新成当前时间(1.1)一个表中出现了两

    2022年7月2日
    26
  • 使用ARP命令[通俗易懂]

    使用ARP命令[通俗易懂]讲解ARPCache更新过程,并分析对应请求报文以及响应报文的内容。1.建立网络拓扑2.填写4个主机的ip地址和子网掩码3.分别对主机pc0和pc1的命令行中输入“arp-a”命令查看其ARP高速缓存,发现无任何缓存信息。4.切换到simulation模式,pc0和pc1的ip分别为源地址和目的地址5.创建一个简单的PDU6.可以发现pc0和pc1之间成功进行了一次传输,即pc0得到了pc1的ip地址和MAC地址7.可以看出pc0发送了一个广播报文8.pc1得到响应

    2025年6月19日
    3
  • js定义点击事件_回字四种写法

    js定义点击事件_回字四种写法嵌入式点击按钮脚本模型btn.onclick=function(){}W3C事件写法添加事件:appEventListener(事件名,事件函数,false)btn.addEventLi

    2022年8月5日
    10

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号