前言:
今天各位老铁们对“编译原理预处理实验报告怎么写”都比较关心,咱们都想要学习一些“编译原理预处理实验报告怎么写”的相关资讯。那么小编在网上收集了一些关于“编译原理预处理实验报告怎么写””的相关内容,希望兄弟们能喜欢,你们一起来学习一下吧!今天跟大家一起学习鸿蒙C++编程规范里的编译预处理部分,此规范描述清晰简洁,适合有一定C++编程基础的人学习。
编译预处理的"#"应统⼀放在⾏⾸
编译预处理的"#"统⼀放在⾏⾸。
避免使⽤宏
宏会忽略作⽤域,类型系统以及各种规则,容易引发问题。应尽量避免使⽤宏定义,如果必须使⽤宏,要保证证宏名的唯⼀性。 在C++中,有许多⽅式来避免使⽤宏:
⽤const或enum定义易于理解的常量⽤namespace避免名字冲突⽤inline函数避免函数调⽤的开销⽤template函数来处理多种类型
当然,在⽂件头保护宏、条件编译、⽇志记录等必要场景中可以使⽤宏。
禁⽌使⽤宏来表示常量
宏是简单的⽂本替换,在预处理阶段完成,运⾏报错时直接报相应的值;跟踪调试时也是显示值,⽽不是宏名; 宏没有类型检查,不安全; 宏没有作⽤域,容易重复定义。
可以使用const、enum、constexpr替代常量宏。
禁⽌使⽤函数式宏
宏义函数式宏前,应考虑能否⽤函数替代。对于可替代场景,建议⽤函数替代宏。 函数式宏的缺点如下:
函数式宏缺乏类型检查,不如函数调⽤检查严格宏没有独⽴的作⽤域宏的可读性差部分宏是特定编译器才有的,影响可移植性宏在预编译阶段展开后,在期后编译、链接和调试时都不可⻅,导致函数宏难以调试、难以断点,不利于定位问题对于包含⼤量语句的宏,在每个调⽤点都要展开。如果调⽤点很多,会造成代码空间的膨胀
函数没有宏的上述缺点。但是,函数相⽐宏,最⼤的劣势是执⾏效率不⾼(增加函数调⽤的开销和编译器优化的难度)。 为此,可以在必要时使用内联函数。内联函数跟宏类似,也是在调⽤点展开。不同之处在于内联函数是在编译时展开。
内联函数兼具函数和宏的优点:
内联函数执⾏严格的类型检查内联函数的参数求值只会进⾏⼀次内联函数就地展开,没有函数调⽤的开销内联函数⽐函数优化得更好,对于性能要求⾼的产品代码,可以考虑⽤内联函数代替函数。
例外:对于预编译阶段就需要插入代码的信息,还是可以用函数宏的。例如在⽇志记录场景中,需要通过函数式宏保持调⽤点的⽂件名(FILE)、⾏号(LINE)等信息。
你好,我是意滔,持续分享C++、跨端框架、软件设计相关内容,欢迎关注~
标签: #编译原理预处理实验报告怎么写 #编译预处理有哪几种类型