c - 为什么要把代码放在标题中

标签 c performance header

通常,如果我制作一个小代码片段,我通常会将其放入whathever.c 文件中。在 C 文件中,我包含了一个 .h 文件以及其他包含文件或一些全局变量。

我刚刚听说编译器可以使 header 中的代码更快,或者如果有人可以解释或评论这一点,我会很高兴。

header 中而不是 c 文件中的示例代码(可能位于 c 中)->

#define PWM_INTERRUPT \
void InterruptHook(void) \
{ \
    PR4 ^= _SoftPWM_Toggle; \
    \
    PIR3bits.TMR4IF = 0; \
    \
    _asm \
        INCF PR4,0,ACCESS \
        CPFSLT TMR4,ACCESS \
    _endasm \
    \
    /* if(TMR4 > PR4) */ \
        PIR3bits.TMR4IF = 1; \
    \
    SOFT_PWM_PIN ^= 1; \
    \
    _asm \
        RETFIE 1 \
    _endasm \
}

最佳答案

不能将宏放在单独的 .c 文件中,因为宏由预处理器处理,这是编译过程的第一步,而单独的 .c 文件是在链接阶段处理的,这是编译过程的第一步。最后一步。

使用宏代替函数可能更快,因为它避免了函数调用的开销。但是,它会减慢编译速度,因为它会多次编译相同的代码。由于冗余副本,它会使您的代码变得更大。如果缓存是一个问题,它实际上可能会运行得更慢,因为会反复将不同的冗余副本提取到缓存中。如果不进行分析,就无法确定。

如果您谈论将宏放入同一个 .c 文件和头文件中的区别,那么性能方面没有区别。您只需将其复制并粘贴到使用它的每个 .c 文件中即可。

关于c - 为什么要把代码放在标题中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8733780/

相关文章:

c - 段错误,大型数组

c - 为什么执行此 C MPI 应用程序进行 Pi 近似时的结果总是相同?

sql - View 对聚合函数的性能影响与结果集限制

c++ - 标题中的全局变量和函数

c - 二进制供电给了我错误的结果

c - C 中的 shell : How to execute builtin command with fork() and execve()

c# - 列出 Entity Framework 中外键指向的实体

javascript - 如果我不需要继承或优化,我应该使用原型(prototype)吗

ios - 如何读取 Classes 文件夹中的 Header 以在我自己的 cocoapods 中使用?

下载时图像 blob 不可读(php)