include即文件包含,可以将另一个源文件的内容全部包含进来——书上这么解释的,由此有三问:
1.如果一个程序中其实本不需要很多无用的include,可是如果加了这么多以后会不会影响编译后文件的大小呢?如果不会,那会对什么有影响?
2.为什么编译要得到什么“目标文件”然后又什么连接文件的?能不能简单解释一下这些什么什么文件的是怎么回事阿?不好意思阿,编译原理没学过
3.印象中c++还有什么const,听说这个比#define好,是么?为什么呢?

解决方案 »

  1.   

    1.一般不影响编译文件大小,但是会影响编译速度。如果在头文件中做变量定义、函数实现(当然这是不规范的),会影响编译文件大小。
    2.编译后得到目标文件,连接的目的是对变量实例进行编址。
    3.const和define根本不是一回事,CONST是定义常数变量,但DEFINE只是进行宏替换。比如,如果对一个字符串使用宏替换,那就会在每个引用的地方分配一段空间,这是其中之一的好处。
      

  2.   

    同意xpdavis(咕嘟) 。
    但尽管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中采用了大量的宏替换,将它的作用发挥到了极致。
      

  3.   

    1. 使用头文件,可以使程序更有条理。而且将不同功能的代码放在不同文件中,在编译时会节
    省时间,因为编译器会判断文件是否有改动,如果没有改动就不重新编译。
    2. 使用obj文件,也就是目标代码,也可以减轻重复编译的工作量。之所以有obj文件,是因为
    创建程序的过程是compile+link的过程,而obj就是compile的结果。然后经过link才生成exe
    文件。
    3. const声明的常量编译器会做类型检查,而define则不会,他只是简单的代码替换。
      

  4.   

    include就是把指定文件的所有代码抄过来
      

  5.   

    //xxxx.h#ifndef _XXXX_FILE_H
    #def _XXXX_FILE_H
    ......#endif
    这三句保证中间的代码只被编译一遍。在vc自动生成的头文件中都有这三句话。
      

  6.   

    2,3同GZCompiler. 
    obj减轻重复编译的工作量。当你再次编译的话,vc只编译了你最近修改的文件,而不是编译全部。不过,有时候会出现错误。如果有莫名其妙的错误可以试试Rebuild All,把所有文件重新编译一遍,说不定就可以用了。不过这样编译比较久。
      

  7.   

    假如你有3个cpp文件,那么编译后,就会生成3个代码片断(也就是目标文件),连接就是把这三个代码片断合成一个可执行文件
      

  8.   

    1、include后面的文件会被预编译器展开。include文件写的不好,比如其中不全部是变量声明,有一些变量定义,那么就可能造成程序变大。
    2、编译是按照编译单位进行的。在c++程序中,cpp文件就是编译单位。有几个cpp文件,那就有几个编译单位。这些单位被编译之后是独立的模块,需要连接器把他们合成为完整的程序。
    3、const比define好,主要是有利于调试的原因。const定义的常量是有变量名的,调试的时候可以找到具体出错的位置。define后面的宏展开之后是一些立即数,如果发生错误,很难明白这些数是什么意思。
      

  9.   

    const是定义常量
    define是宏定义
    一般很少用
      

  10.   

    include
    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. 
      

  11.   

    很赞成 xpdavis(咕嘟) 的说法,确实如此。