专门做特价的网站,网站建设工具有哪些品牌,北京怎样建网站,wordpress升级 没有ftp学习笔记#xff01;参考链接
一、类型和安全检查不同宏定义是字符替换#xff0c;没有数据类型的区别#xff0c;同时这种替换没有类型安全检查#xff0c;可能产生边际效应等错误#xff1b;const常量是常量的声明#xff0c;有类型区别#xff0c;需要在编译阶段进行…学习笔记参考链接
一、类型和安全检查不同宏定义是字符替换没有数据类型的区别同时这种替换没有类型安全检查可能产生边际效应等错误const常量是常量的声明有类型区别需要在编译阶段进行类型检查二、编译器处理不同宏定义是一个编译时概念在预处理阶段展开不能对宏定义进行调试生命周期结束与编译时期const常量是一个运行时概念在程序运行使用类似于一个只读行数据三、存储方式不同宏定义是直接替换不会分配内存存储与程序的代码段中const常量需要进行内存分配存储与程序的数据段中四、定义域不同void f1 ()
{#define N 12const int n 12;
}
void f2 ()
{coutN endl; //正确N已经定义过不受定义域限制coutn endl; //错误n定义域只在f1函数中
}五、定义后能否取消宏定义可以通过#undef来使之前的宏定义失效const常量定义后将在定义域内永久有效void f1()
{#define N 12const int n 12;#undef N //取消宏定义后即使在f1函数中N也无效了#define N 21//取消后可以重新定义
}六、是否可以做函数参数宏定义不能作为参数传递给函数const常量可以在函数的参数列表中出现