const定义的常量

 

const定义的常量会被编译器看作是固定值的变量,它与宏不同。

因此,假如有头文件

"head.h"

 

#ifndef HEAD

#define  HEAD

const int EOF = -1

#endif

----------------------------------

有两个C文件C1C2如下:

C1

#include "head.h"

 

C2

#include "head.h"

 

只时编译会出现EOF已定义的错误,原因是#ifndef#endif只对同一个文件起作用,这样就使C1C2同时包含了EOF的定义,导致出错。

 

因此,必须改写"head.h"如下:

#ifndef HEAD

#define  HEAD

extern const int EOF // 仅仅声明EOF

#endif

 

然后,把EOF实际定义在别处。

 

 

 

结论:可以在头文件里包含的东西,都不应该会导致编译器出现具体分配操作的语句。

---------------------------------------------------------------------------------------------------------

const char* str="abc" 和 char* const str="abc" 的区别

const char* str="abc" 或 char const *str="abc" 表示值"abc" 不可修改,而str能够指向另一个字符串。

char* const str="abc" 表示值"abc" 可以修改,而str不能够指向另一地址。

当然,有const char* const str="abc"

 

还可以用const修饰多级指针,

如:

const char** pstr

则**pstr = 'c' //赋值非法

const 能够在多指针的中间出现,表示const后面的部分不可修改.

char* const * pstr;

则 *pstr ="abc" //赋值非法

但 **pstr = 'c' //允许

你可能感兴趣的:(const定义的常量)