栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

程序环境和define的基本用法(C语言版)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

程序环境和define的基本用法(C语言版)

1.编译与链接

编译又分为预处理,编译和汇编三个阶段。

首先源文件test.c进行预处理,包含头文件,define定义符号的替换以及删除注释等操作,然后生成test.i文件。

test.i文件进入编译阶段,把C语言代码转换成汇编代码,然后进行语法分析,词法分析,符号分析以及语义分析等,并转换成test.s文件。

test.s文件进入汇编阶段,把汇编代码转换成二进制指令,并形成符号表,符号表是为了在链接阶段能够跨文件进行函数的查找,并生成test.o文件。

test.o文件在链接阶段会合并段表,符号表的合并和重定位,最后通过链接器和链接库转换成可执行文件test.exe

2.define的用法

2.1定义符号

#define name stuff
#define X 20

此时name表示的就是stuff,X表示的就是20,会在预处理阶段完成替换

2.2定义宏

宏的意义有点类似于函数,但宏并不会单独开辟一块空间来计算函数里的内容

#define SQUARE(X)     ((X)*(X))
#define ADD(X)     ((X)+(X))

这里用括号括起来的意义在于宏只算完成替换,并不是真正意义上的函数,例如当你计算SQUARE(6+1)时,不加括号的结果是6+1*6+1,并不是7*7。当你计算10*ADD(2)时也一样,你想计算的是10*4,而不是10*2+2。所以括号的添加是十分有必要的。

2.3#和##的作用

此时#加其中一个未知数,可以直接表示变换的值或者符号等,而不是一个固定的值。

可以看出##可以连接两个不同的符号合成一个新的符号。

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1025831.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号