#pragma和#ifndef有什么区别?

mac*_*mar 5 c

可能重复:
#pragma一次vs包括警卫?

我应该什么时候使用#pragma once

我应该什么时候使用#ifndef HEADER_H_INCLUDED

小智 10

#ifndef/#define/#endif技巧适用于任何C编译器,其中一些编译器可以加速编译过程.#pragma技巧是非标准的,只适用于少数C编译器,并且可能会导致不支持它的语义不同.

  • 即使它只被一个人支持,但使用它仍然是愚蠢的,因为有一个简单的方法(`#ifndef`一个)适用于所有编译器,并且对于任何知道C的人来说都是普遍熟悉的. (3认同)
  • 但请注意,它支持三大:GCC,MSVC和ICC. (2认同)

R..*_*R.. 7

区别在于后者是C而前者不是。永远不要使用#pragma once; 总是使用#ifndef.

使用该#ifndef方法时要注意的另一件事是,任何以两个下划线开头或一个下划线后跟一个大写字母的预处理器符号都是保留的,不能使用。您应该使用类似#ifndef MYHEADER_H 使用的东西#ifndef _MYHEADER_H