C语言中define的用法

C语言中define的用法1 最简单且最常见的 define 用法 defineN100 编译器在预处理程序时 会将程序中所有的 N 用 100 来替换 换言之 不同于 const 常量 define 其实本质上对文本内容的替换 下面是 define 和 const 的区别 define 是宏定义 程序在预处理阶段将用 define 定义的内容进行了替换 因此在程序运行时 常量表中并没有用 define 定义的常量

1 .最简单且最常见的define用法

#define N 100

编译器在预处理程序时,会将程序中所有的N用100来替换,换言之,不同于const常量,define其实本质上对文本内容的替换。

下面是define和const的区别:

  1. define是宏定义,程序在预处理阶段将用define定义的内容进行了 替换 。因此在程序运行时,常量表中并没有用define定义的常量,系统不为它分配内存。
    而const定义的常量,在程序运行时,存在常量表中,且系统为它分配内存。

  2. define定义的常量,预处理时只是直接进行了替换,因此在编译时不能进行数据类型检验。
    而const定义的常量,在编译时进行严格的类型检验,可以避免出错。

  3. define定义表达式时要注意“边缘效应”
    例如:

#define N 1+2  float a = N/2.0; /* 按照常规做法,可能会认为结果是3/2 = 1.5 但是实际上,结果应该为1+2/2.0 = 2.0 若想要实现3/2,则#define N (1+2) 即为避免边缘效应,一定要加!括!号! */

2 .用define定义函数
举个例子:

#include 
    #define PI 3.14 #define S(r) PI*r*r int main(void) { printf("area = %f", S(1+2)); rerturn 0; }

重要的事情再说一遍:宏其实就是一个简单的文本替换!

3 .不常用的define用法

#define Conn(x,y) xy #define ToChar(x) #@x #define ToString(x) #x

做个越界试验 char a = ToChar(123);结果是a=’3’; 但是如果参数超过四个字符,编译器就会报错!

至于#x,就是给x加上双引号

  • 比如:char* str = ToString();
  • 结果:str=””;

4 .定义宏和取消宏
定义宏使用#define
取消宏定义使用#undef




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

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

(0)
上一篇 2026年3月20日 下午1:01
下一篇 2026年3月20日 下午1:01


相关推荐

  • SCI论文投稿信(Cover Letter)的写法及模版

    SCI论文投稿信(Cover Letter)的写法及模版一、写法投稿信(CoverLetter)应该简述所投稿件的核心内容、主要发现和意义,拟投期刊,对稿件处理有无特殊要求等(如“nottoreview”list)。另外,请附上主要作者的中文姓名、通讯地址、电话、传真和e-mail地址。此外有的杂志要求推荐几位审稿人及其联系方式。以及谁已经阅读过该文(当然是牛人)。一般来说,杂志通常要求说明你论文研究的意义,以及与这个杂志的相关性,另外还有…

    2022年5月8日
    132
  • Android短信验证码控件,Android中实现短信验证码自动填入

    Android短信验证码控件,Android中实现短信验证码自动填入Android中实现短信验证码自动填入由于目前的好多应用都有短信验证,短信验证码收到后,用户手动输入已经显得有麻烦,于是我写了这篇博文,希望能对大家有所帮助。实现步骤:1.写一个SmsBroadcastReceiver,在AndroidMainifirst.xml文件中注册:/***配置广播接收者:**表示:*设置此广播接收者的级别为最高*/类代码:publiccl…

    2022年7月25日
    12
  • javascript和java哪个快_Javascript与Java相比有多快?

    javascript和java哪个快_Javascript与Java相比有多快?Java 和 JavaScript 都是编程语言 编程语言只是一堆抽象的数学规则 编程语言不快 或慢 他们只是 应用程序的性能与语言无关 最重要的因素是应用程序架构 然后是算法效率 然后微优化 然后是编译器 解释器的质量 然后是 CPU 也许两个之间的其他几个步骤 然而 语言不直接起作用 当然 如果你在谈论基准测试 那么特定的基准测试也会发挥作用 基准测试的执行情况 运行得如何好 执行基准测试的人是否

    2025年10月19日
    2
  • 相亲对象告诉你他的相亲史_时间让我看懂一切

    相亲对象告诉你他的相亲史_时间让我看懂一切注:本文,来自csdn论坛的觉的楼主写的不错,所以就引用过啦了,别介意哦,http://topic.csdn.net/u/20100624/16/80f263ca-b05f-456f-bf5f-9d87dd78a6f9.html,作者:NewJacket(这个真不是马甲)(首先说一下,这些文字都欠整理,一路说下去,可能会有些粗糙呵凌乱,还请大家将就看吧。)先说说是如何开始的。正月,来北京的前一天。家里催得紧,没办法,只得硬着头皮相亲去了。这可是俺的第一次啊,其实当时也没抱什么希望。哪能一次就准呢?再说毕

    2022年10月6日
    6
  • navicat 15 激活码(JetBrains全家桶)「建议收藏」

    (navicat 15 激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月28日
    100
  • Zxing.jar下载

    Zxing.jar下载版本3.3.3

    2022年7月13日
    20

发表回复

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

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