1 请教 #pragma once 这个只编译一次是什么意思 ? 是用在头文件里面,还是CPP文件里面?是头文件编译一次,还是CPP编译一次?2 在32位系统(xp) 里面 和64系统(vista)里面 ,int i是不是可以赋值的访问是不同的呀? 

解决方案 »

  1.   

    #pragma onceSpecifies that the file, in which the pragma resides, will be included (opened) only once by the compiler in a build. A common use for this pragma is the following://header.h
    #pragma once
    // Your C or C++ code would follow:
      

  2.   

    1. #pragma once放置在.h文件的开头,表示在编译时,这个头文件只被编译一次,效果同#ifndef...#elif...#endif为了避免同一个数据结构的定义多次访问。防止定义冲突。
    2. 请把问题问说清楚一点,
      

  3.   

    第一个问题,就是一个.h文件可能被多个.cpp文件包含,那么#pragma once的作用就是使该头文件只编译一次了。
      

  4.   

    1,#pragma once放置在.h文件的开头,表示在编译时,这个头文件只被编译一次,效果同#ifndef...#elif...#endif为了避免同一个数据结构的定义多次访问。当然指的是CPP文件了。A包含了D头文件,B也包含了D头文件。C包含了A与B。这种情况下,如果不用#pragma once,D就会编译两次。
    2,32位系统中的int 是四个字节,64位系统中int 是8个字节。赋值与访问方法都是一样的。最大值不一样而已。
      

  5.   

    第一个问题:例如在生成Lib库的时候,很可能因为头文件的包含和相互嵌套,而引起Lib生成不了或者是使用时出现函数接口调用混乱。#pragma once则会指明某个头文件在整个工程中只编译一次。
      

  6.   

    1.[引用]
    在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的编译器能认
    2.和编译平台有关
      

  7.   

    1 请教 #pragma once 这个只编译一次是什么意思 ? 是用在头文件里面,还是CPP文件里面?是头文件编译一次,还是CPP编译一次?
    限制#pragma once所在的文件只编译一次,放在头文件里面,避免重复包含头文件时重复编译。2 在32位系统(xp) 里面 和64系统(vista)里面 ,int i是不是可以赋值的访问是不同的呀?
    与项目选择的平台有关,int在32位程序中是32位,在64位程序中是64位(取值范围变大),32位系统只能运行32位程序,64位系统可以运行32位程序也可以运行64位程序。
      

  8.   


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