include即文件包含,可以将另一个源文件的内容全部包含进来——书上这么解释的,由此有三问:
1.如果一个程序中其实本不需要很多无用的include,可是如果加了这么多以后会不会影响编译后文件的大小呢?如果不会,那会对什么有影响?
2.为什么编译要得到什么“目标文件”然后又什么连接文件的?能不能简单解释一下这些什么什么文件的是怎么回事阿?不好意思阿,编译原理没学过
3.印象中c++还有什么const,听说这个比#define好,是么?为什么呢?
1.如果一个程序中其实本不需要很多无用的include,可是如果加了这么多以后会不会影响编译后文件的大小呢?如果不会,那会对什么有影响?
2.为什么编译要得到什么“目标文件”然后又什么连接文件的?能不能简单解释一下这些什么什么文件的是怎么回事阿?不好意思阿,编译原理没学过
3.印象中c++还有什么const,听说这个比#define好,是么?为什么呢?
解决方案 »
- 关于使用MSCOMM控件的问题
- CMFCToolBar加载位图有背景灰色边框
- 关于socket编程和实际网络机理的问题
- 请教一下消息队列和子窗体的问题?
- 在用CTabCtrl类时遇到的问题
- 如何在自己的程序里调用其他exe程序
- 急!如何在非MFC类中引用MFC类, 说的不是很明白,详情见内
- 很着急的,vc怎么在生成一个office word doc,并且。。。
- 关于mouse的简单问题
- 不见高手不回头:顶层窗口、桌面窗口、桌面的子窗口、任务条窗口、Progman(跟贴有分)
- 各位大哥,小弟才中专毕业,对编程很兴趣,不知能否走这条路?难度有多大?
- 为什么袁哥的这个aspcode.c程序直接编译这么多错?
2.编译后得到目标文件,连接的目的是对变量实例进行编址。
3.const和define根本不是一回事,CONST是定义常数变量,但DEFINE只是进行宏替换。比如,如果对一个字符串使用宏替换,那就会在每个引用的地方分配一段空间,这是其中之一的好处。
但尽管const与#define完全不同,但在某些地方可以用const常量替换define。如
const double PI = 3.14;
#define PI = 3.14
可以得到相同的效果。
如果define没有使用好,可能会引起某些错误,这是有人反对使用#define的原因。如:
#define A 3+4
...
x = A * 2;
结果将会是 x = 3 + 4 * 2 = 11
而不会是期望的 x = (3 + 4) * 2 = 14
这种情况下可以采用加()来避免:
#define A (3+4)其实,如果用好了,宏替换的功能是非常强大的。MFC中采用了大量的宏替换,将它的作用发挥到了极致。
省时间,因为编译器会判断文件是否有改动,如果没有改动就不重新编译。
2. 使用obj文件,也就是目标代码,也可以减轻重复编译的工作量。之所以有obj文件,是因为
创建程序的过程是compile+link的过程,而obj就是compile的结果。然后经过link才生成exe
文件。
3. const声明的常量编译器会做类型检查,而define则不会,他只是简单的代码替换。
#def _XXXX_FILE_H
......#endif
这三句保证中间的代码只被编译一遍。在vc自动生成的头文件中都有这三句话。
obj减轻重复编译的工作量。当你再次编译的话,vc只编译了你最近修改的文件,而不是编译全部。不过,有时候会出现错误。如果有莫名其妙的错误可以试试Rebuild All,把所有文件重新编译一遍,说不定就可以用了。不过这样编译比较久。
2、编译是按照编译单位进行的。在c++程序中,cpp文件就是编译单位。有几个cpp文件,那就有几个编译单位。这些单位被编译之后是独立的模块,需要连接器把他们合成为完整的程序。
3、const比define好,主要是有利于调试的原因。const定义的常量是有变量名的,调试的时候可以找到具体出错的位置。define后面的宏展开之后是一些立即数,如果发生错误,很难明白这些数是什么意思。
define是宏定义
一般很少用
include filenames; filenames
Specifies the name of one or more C-language header files. Use the full file name, including the .H extension and enclose each file name in quotation s. Separate multiple C-language header filenames with commas.
Examples
include "local.h";
include "gendefs.h", "protos.h", "foo.h";
Res
The ACF include statement specifies one or more header files to be included in the generated stub code. The stub code will contain a C-preprocessor #include statement. You supply the C-language header file when compiling the stubs. Include statements rely on the C-compiler mechanism of searching the directory structure for included files.Note Use the import directive rather than the include directive for system files, such as WINDOWS.H, that contain data types you want to make available to the IDL file. The import directive ignores function prototypes and allows you to use MIDL compiler switches that optimize the generation of support routines.