1. 关于宏
宏在c/c++ 中是个很常用的玩意儿,C语言中如何使用宏C(和C++)中的宏属于编译器预处理的范畴,属于编译期概念(而非运行期概念)
函数调用在编译后程序运行时进行,并且分配内存。宏替换在编译前进行,不分配内存, 宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值)
举个例子来说
现在我们有需求需要经常用到一年的秒秒数的这个常数做计算。
代码如下:
#define YEAR_SECONDS365*24*60*60
int _tmain(int argc, _TCHAR* argv[])
{
intnYearSecond=YEAR_SECONDS; // 1
printf("%d\n",nYearSecond);
getchar();
return 0;
}
有些人可能会认为这个时候nYearSecond = 365*24*60*60 其实不然,为什么说预编译呢,其实这个时候编译器在编译的时候已经帮你吧 YEAR_SECONDS 计算好了,即 365*24*60*60 = 31536000 (十六进制为 1E13380),怎么验证呢,很简单只用用编译器进入到汇编状态,就可以很清楚的看到这个时候是将1E13380 赋值给了 变量nYearSecond了,如下图: