# include和#include“filename”之间的区别是什么?

在你编写C程序时,可以通过两种方式包含文件。

第一种方式是用< >符号环绕文件。

这种方法包含告诉预处理器在预定义的默认位置中寻找文件。

这个预定义的默认位置通常是一个包括环境变量,表示你的包含文件的路径。

例如,考虑到包括变量

    INCLUDE=C:\COMPILER\INCLUDE;S:\SOURCE\HEADERS

    使用# include < >方式 ,编译器首先检查C:\COMPILER\INCLUDE;

    如果文件没有找到,然后编译器检查S:\SOURCE\HEADERS目录

    如果文件还没有发现,预处理程序检查当前目录。

    包含文件的第二种方法是围绕着文件要包含双引号。

使用# include""方式 

    这种方法包含告诉预处理器首先寻找文件在当前目录,然后寻找它在预定义的设置位置。

    使用# include"" 文件包含事先同文件下写好的文件,预处理器首先检查当前目录为指定的文件。

    如果没有找到该文件,目录 C:\COMPILER\INCLUDE将被查询。

    如果文件还没有发现,预处理程序将检查S:\SOURCE\HEADERS。

    

   文件包含的# include < >方法通常用于包含标准库stdio.h或stdlib.h等函数。这是因为这些头很少修改(如果有的话),编译器将读取你电脑标准包含文件目录。

  使用# include ""包含文件的方法通常用于包括您已经创建了的,用于您的程序的非标准头文件

。这是因为这些头文件常常会在在当前目录中修改,而且你希望预处理器使用新修改的版本,而不是原先的版本。

2。使用 枚举常量的好处是什么,而不是定义一个常量?

使用枚举常量(枚举)比使用传统的符号常量的# define风格有许多优点。

这些优势包括降低维护要求,提高了程序的可读性,能使程序有更好的调试能力。

1)第一个优势是,枚举常量是由编译器自动生成的。相反,符号常量必须由程序员手动分配值。

    例如,如果你有一个枚举常数类型可能发生错误代码在您的程序,您的枚举定义可能看起来像这样:

    enum Error_Code 

    {

    OUT_OF_MEMORY,

    INSUFFICIENT_DISK_SPACE,

    LOGIC_ERROR,

    FILE_NOT_FOUND

    };

在前面的例子中,OUT_OF_MEMORY是自动分配值0(零)由编译器,因为它第一次出现在定义中。

编译器然后继续自动将数据分配给枚举常量,

    INSUFFICIENT_DISK_SPACE等于1,LOGIC_ERROR等于2,FILE_NOT_FOUND等于3,等等。

    如果你使用符号常量方法相同的例子,你的代码会看起来像这样:

    #define  OUT_OF_MEMORY 0

    #define  INSUFFICIENT_DISK_SPACE 1

    #define  LOGIC_ERROR 2

    #define  FILE_NOT_FOUND 3

    值由程序员赋予。每个两种方法到达相同的结果:四个常量分配数值来表示错误代码。

考虑维护必需的,但是,如果你把两个常数来表示错误代码DRIVE_NOT_READY CORRUPT_FILE。

使用枚举常量的方法,只需将这两个常量枚举定义的任何地方。

编译器会生成两个独特的这些常数的值。使用符号常量的方法,

您必须手动将两个新号码分配给这些常量。

此外,你想确保数字分配给这些常数是独一无二的。

 2) 使用枚举常数方法的另一个优点是,程序可读性更强,

   即便可能更新程序后,也可以使其他人更好地理解。

 3)第三个优势是一些符号调试器使用枚举常量的值可以打印一个枚举常量。

    相反,大多数符号调试器不能印刷符号常量的值。

    这可能在调试程序中是一个巨大的帮助,

    因为如果你的程序是使用enum停在一条线,

    你可以检查这个常数和即刻知道它的价值。

    另一方面,因为大多数调试器不能打印宏定义的值,

    你很可能需要在一个头文件通过手动查找搜索该值。

    这可能是一个巨大的帮助在调试程序中,因为如果你的程序是使用enum停在一条线,

    你可以检查这个常数和即刻知道它的价值。另一方面,因为大多数调试器不能打印#定义值,

    你很可能需要通过手动查找搜索该值在一个头文件。

《http://blog.sina.com.cn/s/blog_75b0e2ad0101cfeb.html/》