c - 多个源中的 sizeof 时间常数

标签 c

我想征求您对“sizeof”使用的意见 它出现在多个源文件中并在同一类型上运行。 例如在我的代码中我需要

sizeof(float) * MY_CONSTANT

在几个地方(例如,用于内存分配或将其传递给 glBufferData() 调用),我正在考虑为此编写一个宏:

#define FLT_TIMES_MY_CONSTANT (sizeof(float)*MY_CONSTANT)

这会给我带来编译速度方面的好处吗?您能想到有什么缺点吗(例如,我需要再添加一个具有该定义的 header 才能包含在所有源代码中)?

问候, 阿尔弗雷德

最佳答案

据我所知,将#define FLT_TIMES_MY_CONSTANT (sizeof(float)*MY_CONSTANT)定义为宏不会给编译速度带来任何好处,事实上,它可能会稍微减慢编译速度由于预处理。

编译分 4 个阶段/步骤进行:

  1. 预处理
  2. 编译
  3. 组装
  4. 链接

在预处理阶段,宏被替换为它们所代表的代码。通过定义宏 #define FLT_TIMES_MY_CONSTANT (sizeof(float)*MY_CONSTANT),您只需添加一个必须在整个代码中替换的宏,这会增加需要执行的工作。在预处理阶段完成。当然,考虑到这是一个简单的替换,进行此替换的时间可能很短,但您绝对不会看到加速。

在我看来,你不应该为了加速编译而包含宏,而应该为了加速开发而包含宏,因为宏减少了你必须花费重复编写的时间代码。

有关编译阶段的更多信息,这可能是一个值得阅读的好资源:http://placementyogi.com/tutorials/c/c-basics/c-program-compilation-steps

关于c - 多个源中的 sizeof 时间常数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41432437/

相关文章:

系统 ("$BASHPID"的 C 函数)不工作

c - 用 c 编写基本 shell 时使用信号处理程序时出现段错误

c++ - 有没有更简洁的方法来公开测试的实现细节?

Python ctypes : doesn't load dll as expected

C程序的命令行输入(使用Perl的 'print'命令)

fork()的执行顺序可以确定吗?

iphone - 如何在 Objective-C 中使用 C 预处理器递增一个值?

c - 这是在 Atom 中运行 C 代码的正确方法吗?

c - 通过 C 程序运行 BASH 命令

c -/proc/net/tcp Solaris 11 下的替代方案