我到处寻找一些关于#实用主义曾经做过什么的澄清,但仍然找不到确切的答案来回答我的一些问题。
#杂注是否曾经确保它包含在其中的头文件只被调用一次,以及包含在所述头文件中的头文件还没有包括在内?另外,如果只调用一次,是否意味着需要特定头的.cpp文件将无法访问它?如果头文件被标记为#杂注一次并包含在.cpp中,那么该头文件还能在其他地方使用吗?
这些都是我找不到的澄清。很抱歉,如果有文档澄清了这一点,但我真的找不到足够具体的东西。
发布于 2014-02-17 19:02:53
#pragma once
只在一个翻译单元中保护一个文件,不包括其包含的子层次结构。(但是,如果该文件的第二次包含被阻止,它就没有机会加倍-包括任何其他内容。)
您仍然可以从另一个.cpp
中再次包含它。
该文件通常由其inode编号标识。
请注意,#pragma once
是严格不标准的,而且大多数人仍然倾向于传统的#ifndef
头保护。
发布于 2014-02-17 19:03:19
#pragma once
导致当前源文件仅在一次编译中包含一次。它本质上类似于#include
警卫。
发布于 2014-02-17 19:18:18
是否曾经确保它包含在其中的头文件只被调用一次,并且包括在所述头文件中的头文件还没有包含?。
该实用程序不影响其他标题。如果带有杂注“A.H”的标题包含“B.H”,则可以通过第三个标头或直接包含“B.H”。
如果只调用一次,这是否意味着需要特定头的.cpp文件将无法访问它?
您可以从任何您想要的任何地方包含标题,只要您认为合适的次数就可以。
如果头文件被标记为#杂注一次并包含在.cpp中,那么该头文件能否在其他地方再次使用?
是的,这是对头的正常操作。
渔获物在哪里?
如果您确实需要不止一次地包含头,那么每个include都会执行与不使用杂注一次或哨兵宏不同的操作。这些情况并不常见。
pragma once
的一个好处是,它可以避免bug,比如有2个头文件,这些文件碰巧具有相同的哨兵宏。当2个头文件具有相同的文件名和相同的宏名称编码样式时,就会发生这种情况。
https://stackoverflow.com/questions/21843520
复制