| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> C语言--预处理(下) -> 正文阅读 |
|
[C++知识库]C语言--预处理(下) |
#define定义宏带副作用的宏参数我们来看如下一段代码 结果分别为12,11,13 当参数替换后,首先判断表达式 (a++)>(b++)?,判断后a的值加1 b的值加1,然后执行表达式(b++)此时执行的值为12,执行完成后b的值加1,则a的值为11,b的值为13。可以看出对于这种情况下的宏是带有副作用的,可能会导致不可预料的结果 #define定义宏的优点 实现以下代码,用函数好还是宏好? 1.用于调用函数和返回代码的时间可能比这个小型计算所需的时间更多,所以宏在速度上和规模上更胜一筹 2.函数的参数必须声明为特定的类型,所以函数只能在类型合适的表达式使用,而宏则与类型无关,所以如果比较浮点型时使用函数就会有警告 劣势1.每次使用宏时,一段宏定义的代码会插入到代码中,除非宏比较短,否则将大幅增加代码的长度 2.由于存在信息差,宏是没办法调试的。我们看到的是宏定义的名字,而实际运行是宏定义的代码。例: 看似代码没错,但实际上是因为无法调试宏而找不出错误。 3.宏由于与类型无关,也就不够严谨 4.宏可能带来运算符优先级的问题,容易导致结果出错 预处理预定义符号 __FILE__? ? ? ? ? 进行编译的源文件 __DATE__? ? ? ? 文件被编译的日期 __TIME__? ? ? ? ?文件被编译的时间 __LINE__? ? ? ? ? 文件当前的行号 __STDC__? ? ? ? ?若编译器遵循ANSI C标准 则值为1,否则未定义 预处理指令 #define? 宏定义 #undef? 撤销已定义宏名 #include? 使编译程序将另一源文件嵌入到带有#include的源文件中 #ifdef? ? 如果定义 #ifndef? ? 如果未定义 #endif 预处理指令为上述以及其他#开头的指令 条件编译 能够让语句选择编译或者放弃 常用于调试性的代码,删除可惜,保留又碍事,或者防止重复头文件多次编译 1.调试性代码 若未定义,则不会编译其中的代码? 2.防止重复的头文件多次编译 ? 还可以用#pragma once ? |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 5:40:22- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |