C言語マクロ定義は2つの最大値と最小値を取得します--実はあなたの考えは間違っています!

690 ワード

/*            
 *            */
#include<stdio.h>
#define MAX(x,y) ((x)<(y)?(y):(x))
#define MIN(X,Y) ({\
	typeof (X) x_ = (X);\
	typeof (Y) y_ = (Y);\
	(x_ < y_) ? x_ : y_; })
/*({...})                     ,           (               Scope)*/
int foo(int *flag);
int foo(int *flag)
{
	*flag = *flag + 3;
	return *flag;
}
int main()
{
	int a=3,b=5,c;
	c = MAX(b,foo(&a));
	printf("a,b,c=%d,%d,%d
",a,b,c); /* a=9,b=5,c=9, MIN a 2 */ c = MIN(b,foo(&a)); printf("a,b,c=%d,%d,%d
",a,b,c); return 0; } /* : * [root@bogon c_study]# ./hong_max_min * a,b,c=9,5,9 * a,b,c=12,5,5 * MIN */