我到处搜索了一些关于什么的澄清 #pragma一次 对于我仍然存在的一些问题,实际上并且找不到明确的答案。
是否 #pragma一次 确保它所包含的头文件仅被调用一次,因为尚未包括所述头文件中包含的头文件?此外,如果只调用一次,这是否意味着需要特定标头的.cpp文件将无法访问它?如果头文件标记为 #pragma一次 并且包含在.cpp中,该头文件可以在其他地方再次使用吗?
这些是我没有找到的澄清。很抱歉,如果有文档在某处澄清了这一点,但我真的找不到任何具体的东西。
答案 0 :(得分:7)
#pragma once
仅保护单个翻译单元中的单个文件,不计入其包含的子层次结构。 (但是,如果文件的第二个包含被阻止,它就没有机会加倍包含其他内容。)
您仍然可以从其他.cpp
再次添加它。
该文件通常由其inode编号标识。
请注意,#pragma once
严格来说是非标准的,大多数人仍然更喜欢传统的#ifndef
标头守卫。
答案 1 :(得分:3)
#pragma once
导致当前源文件仅在单个编译中包含一次。
它基本上类似于#include
警卫。
答案 2 :(得分:2)
#pragma曾经确保它所包含的头文件只被调用一次,因为尚未包含所述头文件中包含的标题吗?
该pragma不会影响其他标头。如果带有编译指示'a.h'的标题包含'b.h',则'b.h'可以通过第三个标题或直接包含在内。
此外,如果仅调用一次,是否意味着需要特定标头的.cpp文件无法访问它?
您可以根据需要随时随地添加标题。
如果头文件标有#pragma一次并包含在.cpp中,该头文件是否可以在其他地方再次使用?
是的,这是标题的常规做法。
捕获的地方在哪里?
如果您确实需要多次包含标题,并且每个包含执行的操作与不使用pragma一次或一个哨兵宏的操作不同。这些情况并不常见。
pragma once
的一个好处是它可以让你免受错误的影响,例如有2个头文件偶然拥有相同的哨兵宏。当2个头文件具有相同的文件名和相同的宏名称编码样式时,就会发生这种情况。