C语言中预处理的示例分析

发布时间:2022-03-04 14:02:02 作者:小新
来源:亿速云 阅读:103

小编给大家分享一下C语言中预处理的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

#define定义宏带副作用的宏参数

我们来看如下一段代码

C语言中预处理的示例分析

结果分别为12,11,13

当参数替换后,首先判断表达式 (a++)>(b++)?,判断后a的值加1 b的值加1,然后执行表达式(b++)此时执行的值为12,执行完成后b的值加1,则a的值为11,b的值为13。可以看出对于这种情况下的宏是带有副作用的,可能会导致不可预料的结果

#define定义宏的优点

实现以下代码,用函数好还是宏好?

C语言中预处理的示例分析

1.用于调用函数和返回代码的时间可能比这个小型计算所需的时间更多,所以宏在速度上和规模上更胜一筹

2.函数的参数必须声明为特定的类型,所以函数只能在类型合适的表达式使用,而宏则与类型无关,所以如果比较浮点型时使用函数就会有警告

#define定义宏劣势

1.每次使用宏时,一段宏定义的代码会插入到代码中,除非宏比较短,否则将大幅增加代码的长度

2.由于存在信息差,宏是没办法调试的。我们看到的是宏定义的名字,而实际运行是宏定义的代码。例:

C语言中预处理的示例分析

C语言中预处理的示例分析

看似代码没错,但实际上是因为无法调试宏而找不出错误。

3.宏由于与类型无关,也就不够严谨

4.宏可能带来运算符优先级的问题,容易导致结果出错

预处理

预定义符号

__FILE__          进行编译的源文件

__DATE__        文件被编译的日期

__TIME__         文件被编译的时间

__LINE__          文件当前的行号

__STDC__         若编译器遵循ANSI C标准 则值为1,否则未定义

预处理指令

#define  宏定义

#undef  撤销已定义宏名

#include  使编译程序将另一源文件嵌入到带有#include的源文件中

#ifdef    如果定义

#ifndef    如果未定义

#endif

预处理指令为上述以及其他#开头的指令

条件编译

能够让语句选择编译或者放弃

常用于调试性的代码,删除可惜,保留又碍事,或者防止重复头文件多次编译

1.调试性代码

C语言中预处理的示例分析

若未定义,则不会编译其中的代码 

C语言中预处理的示例分析

2.防止重复的头文件多次编译

 C语言中预处理的示例分析

还可以用#pragma once

C语言中预处理的示例分析

以上是“C语言中预处理的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

推荐阅读:
  1. C语言之预处理
  2. C语言的编译预处理

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c语言

上一篇:如何使用golang生成wasm文件并在浏览器上执行

下一篇:R语言中corrplot标题居中及eps格式输出的示例分析

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》