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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • onlaunch 异步_小程序onLaunch 与 onload 的异步问题(微信,支付宝实测可用)

    小程序app.js中onLaunch与index.js中onload的异步执行问题,在同时触发的情况下如何等待返回值而响应index中onload的内容比如说获取用户的openid或者凭证在没返回需要的数据之前index.js的onload会执行从而导致后续的代码没有openid的支持*ES6中提供了一个promise方案是一个不错的解决方案promise下载地…

    2022年4月14日
    94
  • 蓝桥杯题目 计算后续日期

    蓝桥杯题目 计算后续日期蓝桥杯题目计算后续日期题目描述我们经常要计算 从今天往后 N 天之后是哪一天 哪年哪月哪日 现在我们就可以编写一个程序 推算指定日期之后的第 N 天是什么日期 输入输入有多组 每组测试用例有一行 包括四个整数 分别表示年 月 日和第 N 天 输出对于每组测试用例 输入由一行组成 表示 年月日 N 天后的 的年 月 日样例输入样例输出 2012

    2025年8月24日
    5
  • releasecapture 函数_整理怎么解释

    releasecapture 函数_整理怎么解释setCapture一.什么是setCapture函数?MDN解释:在处理一个mousedown事件过程中调用这个方法来把全部的鼠标事件重新定向到这个元素,直到鼠标按钮被释放或者document.releaseCapture()被调用。函数作用:程序中主要是要捕获onmousemove和onmouseup事件语法:element.setCapture(retargetToElement);如果被设置为true,所有事件被直接定向到这个元素;如果是false,事件也可以在这

    2022年5月3日
    47
  • pycharm的优势_jupyter pycharm

    pycharm的优势_jupyter pycharm一直用sublime,最近写服务器和客户端的程序时就有些坑了,所以我简单说一下我遇到的他们的区别sublime优点:1.字体好看,界面简洁,看起来很爽2.轻便,直接把目录拖进去就行了,不用创建项目什么的。打开只需0.1秒~但你想要的功能基本都有,还有很多酷炫的插件让你锦上添花3.写代码很酷啊,你去看下sublime官网就知道了,比如多行编辑(这个确实用到过),还有各种快捷键让…

    2022年8月29日
    3
  • 用ldap方式访问AD域的的错误解释

    用ldap方式访问AD域的的错误解释

    2021年8月14日
    72
  • bug与漏洞

    bug与漏洞

    2021年7月31日
    79

发表回复

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

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