1.I看到很多地方,头警卫和编译一次使用起来太在一个特定的顺序(没有顺序居然有关系吗?)头警卫和编译一次
2.Also另一个疑问是默认每当VS IDE生成一个新的类文件时,它就会将#pragma放到实现文件(.cpp)中一次。这真的需要吗?
#ifndef MYHEADER_H
#define MYHEADER_H
#pragma once
//my set of includes
这是正确的标题守卫或阻止多个包含物的方式吗?
1.I看到很多地方,头警卫和编译一次使用起来太在一个特定的顺序(没有顺序居然有关系吗?)头警卫和编译一次
2.Also另一个疑问是默认每当VS IDE生成一个新的类文件时,它就会将#pragma放到实现文件(.cpp)中一次。这真的需要吗?
#ifndef MYHEADER_H
#define MYHEADER_H
#pragma once
//my set of includes
这是正确的标题守卫或阻止多个包含物的方式吗?
#pragma once
尽管得到了许多流行的编译器/预处理器的支持,但它并不是标准的。请参阅Is #pragma once a safe include guard?
#ifndef MYHEADER_H
#define MYHEADER_H
#endif // ndef MYHEADER_H
保证可以与所有C++编译器/预处理器一起使用。
没有必要同时使用两者。
“#pragma once”是编译器特有的,可能不是可移植的。 “#ifndef/#define/#endif”更具可移植性,适用于所有预处理器。
那么这是否意味着添加两者的好习惯?我不能说明为什么两个都用在代码中?如果还看到#pragma或者编译器优化会消除#define,它是否会给出任何额外的编译优化? – surega 2013-02-15 21:35:25
我做了#pragma一次,并包括警卫。我从来没有比较过#pragma与包括守卫的表现,但我可以想象,在#pragma之后中止解析比寻找#endif更快。 – 2013-02-18 18:27:26
#pragma once
与包括卫兵是一样的,但它不是标准。它做同样的事情,但一些编译器将编译包含此指令的更快的文件。
它将被不支持它的编译器忽略。
因此,既可以确保代码的可移植性,又可以更快地编译。
为了获得它的好处,如果还有任何(@jalf),我想你必须先拥有它。 – ChiefTwoPencils 2013-02-15 21:38:20
另请参见[为什么C/C++的“#pragma once”是ISO标准?](http://stackoverflow.com/questions/1695807/why-isnt-c-cs-pragma-once-an-iso-标准?rq = 1) – 2013-02-15 21:43:26