几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量

几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量 (http://www.dimcax.com/hust/index.php)
-   vc编程 (http://www.dimcax.com/hust/forumdisplay.php?f=76)
-   -   【转帖】#pragma once是什么意思 (http://www.dimcax.com/hust/showthread.php?t=2281)

huangyhg 2008-12-18 10:26 AM

【转帖】#pragma once是什么意思
 
在vc6的时代头文件一般使用ifndef define endif
在vc7的时代头文件一般成了pragma once
举例来说明,可能有好几个库,每个库内部可能都有public.h这个文件,如果使用
ifndef public_h
define public_h
...
endif
那么当一个文件同时引用两个这样的库时,后一个库里的文件就不被编译了,而pragma once可以保证文件只被编译一次. 看起来pragma once比ifndef define endif要好,那么ifndef define endif的地方都pragma once好了。

今天碰到了又一个例子,比如你有一个zlib.h在几个库都用到,而为了方便,把zlib每个目录下copy了一分,因为这个文件不会作修改,已经很完整了,这个时候如果使用pragma once,就会重复定义,看来ifndef define endif还是又派上用场的地方。
所以对于公有或者接口的文件,使用ifndef define endif,对于内部的文件使用pragma once. 并且, 使用#pragma once虽然方便,但将导致代码移植性变差,因为只有VC的编译器能认


所有的时间均为北京时间。 现在的时间是 01:48 AM.