代码之家  ›  专栏  ›  技术社区  ›  sud03r

使用在头文件中定义的宏

  •  2
  • sud03r  · 技术社区  · 15 年前

    我在头文件中有如下宏定义:

    // header.h
    ARRAY_SZ(a) = ((int) sizeof(a)/sizeof(a[0]));
    

    这是在一些头文件中定义的,其中包括更多的头文件。

    现在,我需要在一些没有其他原因的源文件中使用这个宏 header.h 或包含在 标题.h ,因此,我应该在源文件中重新定义宏还是只包含头文件 标题 .

    后一种方法会影响代码大小/编译时间(我认为是)还是运行时(我认为不是)?

    你对此的建议!

    6 回复  |  直到 15 年前
        1
  •  5
  •   plinth    15 年前

    包含头文件或将其拆分为较小的单元,并将其包含在原始头文件和代码中。

    至于代码大小,除非您的头做了一些非常不明智的事情,比如声明变量或定义函数,否则它们不应该对内存占用有太大的影响(如果有的话)。它们会在一定程度上影响您的编译时间,并污染您的名称空间。

        2
  •  4
  •   Ryan    15 年前

    除非使用预编译头文件,否则在源文件中包含头文件可能会稍微影响编译时间。但它不应该影响代码大小。重新定义宏不应该对编译时间或大小有任何影响。不过,这更多的是维护和一致性问题。

        3
  •  3
  •   sbi    15 年前

    我应该在源文件中重新定义宏还是只包含头文件 header.h .

    两者都不。相反,您应该清理代码并中断 标题 这样你就可以 ARRAY_SZ() 也不会得到无关的东西。

        4
  •  2
  •   anon    15 年前

    你问:

    后一种方法会影响 代码大小/编译时间(我想是的)

    在特定宏的情况下,对大小的回答是“否”,因为size of表达式可以在编译时计算,因此对时间的回答是“是”。两者都不太可能有重大意义。

        5
  •  2
  •   Community CDub    8 年前

    除非您在一个非常有限的硬件上运行它,或者这被称为数十亿次,否则无论在编译时还是运行时,您都不会注意到这两者之间的任何区别。

    去寻找任何看起来可读/可维护的东西。

    就个人而言,我建议有更好的方法来实现你正在做的事情,而不涉及宏(即 inline functions 和/或 function templates )你必须小心使用你的解决方案,因为 a few gotchas 你需要注意。

        6
  •  1
  •   sharptooth    15 年前

    包括该头和包含在其中的所有其他头将增加编译时间。如果有其他定义会改变代码的编译方式,那么它会影响运行时——如果由于这些定义,代码的编译方式有所不同,那么它当然会以不同的方式运行。尽管后者不常见,但要小心。