#pragma 用于什么?

43

有人能帮我理解#pragma吗?

ifndef TARGET_OS_LINUX
#pragma once
endif

什么是什么,何时发生,发生在哪里,为什么会发生,还有一个示例?

上述代码是我正在重构的一些代码....

2个回答

47

#pragma 是一个编译器特定功能的前缀。

在这种情况下,#pragma once 的意思是将此头文件仅包含一次于特定目标文件中。它消除了include guards的需求。


2
除了警告#pragmas是编译器扩展而不在标准中之外,一切都正确。最好避免使用它们。 - f0b0s
2
这不是他说的吗?编译器特定功能==非标准编译器扩展。 - jalf
@John - 那我在哪里可以获得编译器特定功能的列表呢?我确定这些会因为GCC和Intel CC而有所不同,那么对于可移植代码来说,最好的安全保障是什么? - user147502
1
在编译器文档中获取编译器特定的预处理指令列表。对于可移植代码的最佳保障是不使用 #pragma。 - Richard Corden
此答案中应包括“pragma”这个单词实际上代表或缩写的含义! - jbyrd

16
  • 什么 -- 这是头文件保护。此文件只会被包含一次。
  • 何时 -- 在编译过程中
  • 为什么 -- 为了避免重复包含。

"头文件保护是一小段代码,用于保护头文件的内容不被包含多次。"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接