主要内容:宏定义、max(a,b)宏定义细节、大小端判断、(int&)a什么意思
#if 1
#include <stdio.h>
// 注意空格
#define F (x) ((x) - 1) // F代表后面
#define F(x) ((x) - 1) // F(x)代表后面
#define T1 struct type*
T1 a,b; // 使用上面在定义多个变量时达不到目的,被解析为struct type* a,b; a为指向结构体的指针,而b被定义为一个结构体
// 经典的笔试题宏定义求最大值
//#define max(a,b) a>b?a:b //这个很容易错,下面的比较不容易错,但是也会有错的时候
#define max(a,b) ((a)>(b)?(a):(b)) // 写成这样得不到满分,仍然可能会出现问题,解释如下
// 同时这个宏定义也没有考虑传入不同类型的参数情况,
/*
* 如果一个操作数在两处被用到,就会被求值两次;
* 表达式max(a,b)中如果带有副作用,在比较大小时会计算一次,在后面计算值时也会计算一次
* 错误例子如下 :
*/
int main(int argc, char** argv)
{
int x[3] = {2,3,1};
int biggest = x[0];
int i = 1;
while(i < 3)
{
biggest = max(biggest, x[i++]); // 被拆解为biggest > x[i++]?bigg