C语言define的用法整理

C语言define的用法整理define 简单定义 define 指令被称为宏定义 在 C 程序编译的第一个步骤预处理阶段被编译 其作用就是替换任意文本 它的最简单的用法 用来定义数值宏常量 definePI3 14 在这条指令之后出现的任何字符 nbsp PI 都会被预处理器替换为 3 14 比如说下面这条指令 C 2 PI 10 编译器在处理这条代码之前 会先把 PI 替换成 3 14 然后在

#define简单定义

#define指令被称为宏定义,在C程序编译的第一个步骤预处理阶段被编译,其作用就是替换任意文本。

它的最简单的用法,用来定义数值宏常量

#define PI 3.14

在这条指令之后出现的任何字符 PI 都会被预处理器替换为 3.14。

比如说下面这条指令

C = 2 * PI * 10;

编译器在处理这条代码之前,会先把 PI 替换成 3.14 然后在计算 2 * 3.14 *10 得 62.8 再赋值给变量C。

在你需要修改圆周率 3.14 的精度的情况下,则只需要改宏定义 PI 后的值就可实现全部都更改,不用一个一个地去改,这一点在你用了很多的圆周率3.14的时候更有效,前提是在使用圆周率 3.14 的时候都用PI来写;

#define函数定义

#define 还可以用来定义函数

比如定义无参宏函数

#define PRINT printf("hello world") 

定义有参宏函数

#define P(s) printf("%d", s);

宏函数的优点是节省空间,不用给形参分配空间,缺点是会浪费时间(编译预处理阶段),没有语法检查,不安全

相对的,普通函数的优点是有语法检查,缺点是占用了空间。

#define表达式定义

在用#define定义表达式很容易出错,尤其是带参表达式,比如

#define MULT(a,b) a * b

假设 a = 1, b = 2, MULT(a, b)所得结果为 2,这应该都没问题。

但如果 a = 1 + 1,b = 2,MULT(a, b)所得结果不是4,应该是3。前面说过#define起到的是替换作用,所以最后的表达式应该替换为 1 + 1 * 2,所得结果为3。 遇到这种情况,其实只要多加括号就行,

#define MULT(a,b) ((a) * (b))

里层外层的括号都要,不要吝啬。

#define字符串定义

在编写C程序中,我们经常要敲好多字符串,尤其是路径,一个个改太费时费力,还容易出错,用define可以完美解决这个问题

#define MAIL  #define IP 172.172.0.0 #define PATH E:\\local\\music\\music.mp3

#undef取消宏定义

#undef是用来取消宏定义的

#define PI 3.14 . . . #undef PI

#undef 后的代码再用 PI 就不会再替换为3.14了。

关于#define中的空格怎么处理

使用#define进行宏定义的时候常常会用到空格,下面我们来看看该怎么处理

#define FUN(x) x * x #define FUN2 (x) x * x #define FUN3( x ) x * x FUN(1) FUN2(2) FUN3(3)

上述代码经过预处理后的结果为 

1 * 1 (x) x * x(2) 3 * 3

可见在#define宏定义中,遇到的除了括号'()’内部的第一个空格,就把空格前的内容替换为空格后面的内容。

在进行宏定义的时候可以使用反斜杠接续符 ‘ \ ‘ ,来接续上一行,反斜杠作为接续符时,在本行其后面不能再有任何字符,空格都不行。

参考博客:http://www.cnblogs.com/haore147/p/3646934.html

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

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

(0)
上一篇 2026年3月16日 下午7:45
下一篇 2026年3月16日 下午7:45


相关推荐

  • AI 智能体 2026 全面爆发:从 “会聊天” 到 能办事

    AI 智能体 2026 全面爆发:从 “会聊天” 到 能办事

    2026年3月17日
    2
  • mcp2515驱动

    mcp2515驱动include mcp2515 h nbsp RXB0 sdataregiste nbsp unsignedchar 8 RXB0D0 RXB0D1 RXB0D2 RXB0D3 RXB0D4 RXB0D5 RXB0D6 RXB0D7 nbsp TXB0 sdataregiste nbsp unsignedchar 8 TXB0D0 TXB0

    2026年3月19日
    2
  • EM算法原理

    EM算法原理

    2021年11月24日
    79
  • plc中scl语言_plc中scr是什么意思

    plc中scl语言_plc中scr是什么意思本人小白一个,只是刚刚学习scl,想与大家分享一下,如果您是大佬,请勿喷。在我的理解,PLC就像单片机,而scl语言就像C语言,例如scl语言里的=就是C里的==如果学过C将会事半功倍,SCL语言学习并不需要什么网上视频,譬如我在某宝上买了一个视频,发现他讲的没有什么用处你只要会按F1,都能把他讲的找到,西门子的帮助功能十分强大,你可以找到基础的+,-,*,/,=,:=等等,他都会教给你使用及符…

    2022年10月7日
    4
  • 闭包面试回答_ajax面试题

    闭包面试回答_ajax面试题写在前面:在学习了闭包之后,试着做做这些题。其实是一种很棒地检验自己学习成果的手段。我当时反反复复,学了但好像又没完全学,遇到题还是一头雾水,到现在可以捋得很清楚也经历了蛮久的。而且从this,执行上下文,作用域一直走过来,这些题目涉及的内容也相对全面,加油喽。

    2022年8月30日
    6
  • Typora中文版,文本编辑器Typora下载

    Typora中文版,文本编辑器Typora下载Typoraformac是Macos平台上的一款帮助用户编辑文本的Mac软件,没有其他编辑软件那么麻烦,这款软件可以直观的看到源部分和预览部分,非常的方便。Typora不止拥有上面提到的功能,还拥有很多其他优秀的特性。带有书签的PDF可以通过typora生成。通过Pandoc的集成,可以导出或导入更多格式,包括docx,Openoffice,LaTeX,MediaWiki,Epub等。字数查看文档以单词,字符,行或阅读分钟为单位的大小。对焦模式和TypeWriter模式对焦模式可帮助您仅通过

    2022年5月19日
    38

发表回复

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

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