1 请教 #pragma once 这个只编译一次是什么意思 ? 是用在头文件里面,还是CPP文件里面?是头文件编译一次,还是CPP编译一次?2 在32位系统(xp) 里面 和64系统(vista)里面 ,int i是不是可以赋值的访问是不同的呀?
解决方案 »
- cximage decode的问题
- CDHtmlDialog中调用javascript函数时存在延迟..
- fatal error RC1015: cannot open include file 'res\hhaa.rc2'.
- 关于OLE容器中 文档的内容是否修改 的问题 ?
- 怎么全局HOOK剪切板?
- 调用excel时如何设置栏宽度
- 新公司第一个项目,水晶报表的,第一次接触,都不知道水晶报表是个什么东东
- 如何在窗口的任意位置显示“提示条”
- 高分!解决就给!
- 在读取串口数据时,老是返回上一次发送的数据?
- 提一个简单有问题
- CHtmlview 加载一个网页该网页只有一个FLASH,导航后显示不全,最小化后还原显示的内容更少
#pragma once
// Your C or C++ code would follow:
2. 请把问题问说清楚一点,
2,32位系统中的int 是四个字节,64位系统中int 是8个字节。赋值与访问方法都是一样的。最大值不一样而已。
在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.和编译平台有关
限制#pragma once所在的文件只编译一次,放在头文件里面,避免重复包含头文件时重复编译。2 在32位系统(xp) 里面 和64系统(vista)里面 ,int i是不是可以赋值的访问是不同的呀?
与项目选择的平台有关,int在32位程序中是32位,在64位程序中是64位(取值范围变大),32位系统只能运行32位程序,64位系统可以运行32位程序也可以运行64位程序。
今天碰到了又一个例子,比如你有一个zlib.h在几个库都用到,而为了方便,把zlib每个目录下copy了一分,因为这个文件不会作修改,已经很完整了,这个时候如果使用pragma once,就会重复定义,看来ifndef define endif还是又派上用场的地方。
所以对于公有或者接口的文件,使用ifndef define endif,对于内部的文件使用pragma once. 并且, 使用#pragma once虽然方便,但将导致代码移植性变差,因为只有VC的编译器能认
----------------------------------------------------------------------上面的这段话没搞清楚,这么会重复定义呀?为什么哪?