在C中,当您想进行通用编程时,唯一受语言支持的选项是宏。它们效果很好并且被广泛使用,但是如果可以使用内联函数或常规函数,则不建议使用它们。 (如果使用gcc,也可以使用gcc statement expressions,这样可以避免出现两次重复评估的“ bug”。Example。)
但是,C ++通过创建templates消除了宏的所谓“邪恶”。我对C ++语言的庞大庞然大物还是有些陌生(我估计它的功能和语言构造必须是C的4或5倍),并且通常偏爱宏或gcc语句表达式,但是越来越多的压力要求使用模板代替它们。这就引出了一个问题:通常,用C ++进行通用编程时,它将产生较小的可执行文件:宏还是模板?
如果您说“大小无关紧要,选择安全胜于大小”,我将继续阻止您。对于大型计算机和应用程序编程,这可能是正确的,但对于在Arduino,具有8KB闪存空间用于程序的ATTiny85或其他小型设备上的微控制器编程,这是很费力的。大小也很重要,因此必须进行权衡。
进行通用编程时,哪个会为相同的代码生成较小的可执行文件?宏还是模板?欢迎任何其他见解。
在目前的历史上,2020年,这仅仅是优化程序的工作。您可以通过组装获得更好的速度,但要点是,在尺寸和速度上都不值得。
通过适当的C ++编程,您的代码将足够快且足够小。通过弄乱代码的可读性来变得更快或更小是不值得的。
就是说,宏在预处理器级别替换了东西,模板在编译级别替换了东西。使用宏可能会加快编译时间,但是好的编译器会比宏更优化它们。这意味着您可以具有相同的exe大小,或者使用模板可以更少。