前言
接手别人的项目,在项目中老是会出现说是重复定义的警告。这类的博客较少,我只好多方查找参考资料。今天出一个完整的报告共和我有同样问题的同事做以参考。
概念:
假设先把LIMIT定义为21,后来在该文件中又定义为26。这一过程被称之为重定义常量
编程时,头文件中引用头文件,定义全局变量,一定要慎重考虑
不同的实现方式采用不同的重定义方案。除非新旧定义相同,否则这些定义会被编译器认定是错误。还有一些实现方式允许重定义,但会给出警告。
ANSI标准采用第一种结局方案,只有新定义和旧定义完全相同才被允许重定义。
例:
具有相同的定义意味着替换体中的记号必须相同,且顺序相同。
#define SIX 2 * 3
#define SIX 2 * 3
这两条定义都有相同三个记号,额外的空格不算替换体的一部分。
#define SIX 2*3
这条定义只用一个记号,与前两个不同。如果需要重新定义,就需要使用 #undef 指令
若确实需要重定义常量,则使用 const 关键字和作用域规则更容易一些
#undef指令详解
#include<stdio.h>
int main()
{
#define TWO 2
printf("%d\n",TWO);
#undef TWO
printf("%d\n",TWO*TWO);
return 0;
}
printf("%d\n",TWO*TWO);这行语句报错
#undef起的作用:
当用完一个宏,不希望下面的代码再用到这个宏,那么就可以#undef它
常用于:
#define MAX 20
#include "myself.h"
#undef MAX
**只有myself.h中的函数可以使用宏