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


相关推荐

  • java对象转换map

    java对象转换map背景介绍原理说明反射概念功能作用实现方式方法介绍实例展示对象转MAP背景介绍  今天在项目研发的过程中遇到这样一个需求,在一个统一处理类的入口要将所有后面处理流程需要用到的值统一塞进上下文的MAP对象中,这其中就包括了一持久层的DO对象。  如果对于对象进行逐个遍历是可以实现这个需求,但代码量比较大,所以一直在寻求一种比较合理的处理方式。后来发现可以通过反射的方式实现这个功能。原理

    2022年6月11日
    42
  • 小明加密通道进入_门禁系统跟闸机通道的区分是什么?功能是一样吗

    小明加密通道进入_门禁系统跟闸机通道的区分是什么?功能是一样吗门禁系统属于一卡通系统的范畴。它是以中央处理器为核心,由控制器、信息采集器和电控锁组成的控制网络系统。通过系统的信息读取和处理,实现了各种门锁开关的自动控制。根据信息阅读的方式可以分为:插卡式、感应式、图像检测式、双眼虹膜识别式等。他们的技术含量和体系工程预算顺序先后提高。且融合三辊闸、摆闸、翼闸等多种入口处监管设施,保持更智能。门禁用到ID和IC两种卡片,IC门禁有加密功能,存贮容量也大,广泛用…

    2022年6月11日
    64
  • 信号分析与处理1「建议收藏」

    信号分析与处理1「建议收藏」(此帖引至网络资源,仅供参考学习)第一:频谱一.调用方法X=FFT(x);X=FFT(x,N);x=IFFT(X);x=IFFT(X,N)用MATLAB进行谱分析时注意:(1)函数FFT返回值的数据结

    2022年8月4日
    5
  • 10 个冷门但又非常实用的 Docker 使用技巧

    点击上方“全栈程序员社区”,星标公众号 重磅干货,第一时间送达 在平时的工作中,docker 接触得很多,除了经常使用的 docker run ,docker stop 等命令,d…

    2021年6月26日
    94
  • c++ 常量表达式_c语言所有函数

    c++ 常量表达式_c语言所有函数constexpr修饰函数。普通函数/类成员函数。1.函数必须要有返回值,并且return返回的表达式必须是常量表达式。错误代码如下:#include<iostream>usingnamespacestd;//error不是常量表达式函数constexprvoidfunc1(){ inta=200; cout<<a<<endl;}//error不是常量表达式函数因为a是变量,不是常量constexprint

    2022年9月27日
    2
  • oracle删除表空间语句「建议收藏」

    oracle删除表空间语句「建议收藏」–删除空的表空间,但是不包含物理文件droptablespacetablespace_name;–删除非空表空间,但是不包含物理文件droptablespacetablespace_nameincludingcontents;–删除空表空间,包含物理文件drop

    2025年7月21日
    1

发表回复

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

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