1.?
#include <stdio.h>
#define MAX(X,Y) ((X) > (Y) ? (X) : (Y))
int main()
{
int x = 5;
int y = 8;
int z = MAX(x++,y++);
printf("x=%d y=%d z=%d\n",x,y,z);
return 0;
}
MAX宏可以证明具有副作用的参数所引起的问题,观察下面代码,你认为它将打印什么
x=6 y=10 z=9
说明: MAX(x++,y++) 预编译替换为: ((x++) > (y++) > (x++) : (y++)) , x++和y++都是后缀++所以先比较后++,
所以x=5 y=8 条件表达式为假(比较后x=6,y=9),执行y++,由于是后置++所以先返回9,然后y=10
2.
typedef int * int_p;
int_p x,y; //这里x、y都是int*指针类型
#define int_p int *
int_p x,y; //预编译替换为:int * x,y; 这里x为int*指针类型,而y为int类型
3.?四、命令行定义
4.
5.3 是否被定义
#if defined(symbol)
#ifdef symbol
说明:上面两条语句等价
功能:当symbol符号存在,则编译#if与#endif之间语句
#if !defined(symbol)
#ifndef symbol
说明:上面两条语句等价
功能:当symbol符号不存在,则编译#if与#endif之间语句
5.
#ifndef _HEADERNAME_H
#define _HEADERNAME_H
//头文件内容
#end
当头文件第一次被包含时,_HEADERNAME_H未定义,条件判断为真,使用宏定义_HEADERNAME_H,并包含头文件内容。如果头文件再次被包含,条件判断为假,头文件内容不会再次被包含。
_HEADERNAME_H :按照头文件名进行取名,以避免其他头文件使用相同的名字而引起冲突。如头文件add.h, 则 _ADD_H
6.
在学习数据结构栈这一部分的时候,有一句代码
if (!S.base)exit(OVERFLOW);
搞不懂什么意思
exit是c++程序的退出函数,声明为void exit(int value)
其功能是退出当前的程序,并将参数value返回主调进程
OVERFLOW为math.h的一个宏定义,其值为3。含义为运算过程中出现了上溢,即运算结果超出了运算变量所能存储的范围。
所以,exit(OVERFLOW)的含义就是,退出程序,并返回OVERFLOW的值给主调进程。其标准的使用范围为,当程序运算出现上溢时,退出程序并报错给主调进程。