const定义的常量会被编译器看作是固定值的变量,它与宏不同。
因此,假如有头文件
"head.h"
#ifndef HEAD
#define HEAD
const int EOF = -1;
#endif
----------------------------------
有两个C文件C1,C2如下:
C1
#include "head.h"
C2
#include "head.h"
只时编译会出现EOF已定义的错误,原因是#ifndef和#endif只对同一个文件起作用,这样就使C1,C2同时包含了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' //允许