#pragma曾经在C中意味着什么?

wir*_*ark 16 c pragma

可能重复:
#pragma - 帮助理解

我看过pragma很多次,但总是很困惑,任何人都知道它的作用?它只是窗户吗?

hel*_*hod 29

在C和C++编程语言中,#pragma once是一种非标准但广泛支持的预处理程序指令,旨在使当前源文件仅在一次编译中包含一次.因此,#pragma曾经提供与#include guards相同的目的,但有几个优点,包括:更少的代码,避免名称冲突,以及提高编译速度.

有关更多详细信息,请参阅Wikipedia文章.

  • @wireshark 这是一个希腊词,“πράγμα”,它来自实用主义,正如 [here](http://stackoverflow.com/questions/3791259/where-does-the-word-pragma-come-from)... .因为在希腊语中确切的意思是“事物”,但如果你关注它的来源,你可以说它的意思是“行动”。 (2认同)

Ale*_*mer 16

它用于替换以下预处理器代码:

#ifndef _MYHEADER_H_
#define _MYHEADER_H_
...
#endif
Run Code Online (Sandbox Code Playgroud)

一个很好的约定是添加两者来支持遗留编译器(这是很少见的):

#pragma once
#ifndef _MYHEADER_H_
#define _MYHEADER_H_
...
#endif
Run Code Online (Sandbox Code Playgroud)

因此,如果#pragma失败,旧方法仍然有效.

  • 如果目的只是支持遗留预处理器,我们不需要“#pragma Once”。只有 `#ifndef ... #define... #endif` 对于*每个*预处理器来说就足够了(是的,预处理器,而不是编译器,你知道:) (7认同)
  • 谢谢你的例子。 (2认同)
  • 有趣的帖子@Dúthomhas。阅读该线程后我的结论是 - 使用“#pragma Once”没有任何问题,并且上述建议仍然有效。正如人们在 Reddit 帖子中讨论的那样——如果你用硬链接和其他类似的疯狂行为来施展魔法,你就活该受苦。对于其他人来说,它按设计工作:) (2认同)