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


相关推荐

  • Android常见手机分辨率[通俗易懂]

    Android常见手机分辨率[通俗易懂]480*320800*480854*480960*5401020*6001024*7681196*7201280*7701280*8001812*10801920*10802560*1440获取设备最小宽度:DisplayMetricsdm=newDisplayMetrics();getWindo…

    2022年8月13日
    7
  • Address Sanitizer使用指南

    Address Sanitizer使用指南提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档文章目录前言一 pandas 是什么 二 使用步骤 1 引入库 2 读入数据总结前言 AddressSanit 使用提示 以下是本篇文章正文内容 下面案例可供参考一 pandas 是什么 示例 pandas 是基于 NumPy 的一种工具 该工具是为了解决数据分析任务而创建的 二 使用步骤 1 引入库代码如下 示例 importnumpya

    2025年8月3日
    3
  • CodeForces 484A Bits

    CodeForces 484A Bits

    2022年1月13日
    47
  • 解决MyQL数据库中1045错误的方法——Windows系统

    解决MyQL数据库中1045错误的方法——Windows系统在各种各样的适用场所,MySQL会出现各种各样的问题,经过足足半年的长跑,我的数据库终于修复了Bug,可以重新使用了。数据库出问题,那可能是家常便饭了。经过这足足半年的煎熬,我决定在以后的日子里,记录下我在使用数据库时遇到的色彩缤纷的问题,以及这些问题的解决方法。由此,今天写了这篇博客。首先,给大家看看,这个问题是什么样子的。我在这里用到的MySQL可视化工具为Navicat。这个错误…

    2022年6月13日
    29
  • 极限学习机(Extreme Learning Machine)概述

    极限学习机(Extreme Learning Machine)概述摘要当今研究领域的一项事实就是,前向神经网络(feed-forwardneuralnetworks)的训练速度比人们所期望的速度要慢很多。并且,在过去的几十年中,前向神经网络在应用领域存在着很大的

    2022年8月4日
    6
  • Spring AOP 实现监控方法执行的时间(统计service中方法执行的时间)

    项目中有时候会遇到统计方法执行的时间,来对项目进行优化!下面是我自己在工作中遇到的问题,和我自己的解决方法。要统计出项目中方法执行时间大于1秒的那些方法!我们的项目开发使用的是SpringMVC 那么首先想到使用 Aop Aspet 切面统计,那样子更加方便也高效。1:打开切面!因为项目使用的SpringMVC,项目中的配置文件就配置的 <aop:aspectj-autoproxy …

    2022年2月24日
    48

发表回复

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

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