一直被我忽视的宏
#include <stdio.h> #define Max(x,y) (x) >= (y) ? (x) : (y) //调用了两次get #define max(x,y) ( { typeof(x) _x = x; typeof(y) _y = y; _x > _y ? _x : _y;} ) //只调用一次get函数 #define SetName(name) T_##name #define C(x) #x /* 定义单行宏:主要有以下三种用法. 1) 前加##或后加##,将标记作为一个合法的标识符的一部分.注意,不是字符串.多用于多行的宏定义中.例如: #define A(x) T_##x 则 int A(1) = 10; //等效于int T_1 = 10; #define A(x) Tx##__ 则 int A(1) = 10; //等效于int T1__ = 10; 2) 前加#@,将标记转换为相应的字符,注意:仅对单一标记转换有效(理解有误?) #define B(x) #@x 则B(a)即’a’,B(1)即’1’.但B(abc)却不甚有效. 3) 前加#,将标记转换为字符串. #define C(x) #x 则C(1+1) 即 ”1+1”. */ int get(int); int ans; int main( ) { int a, b; char str[100]; while( scanf("%d%d",&a,&b) != EOF) { ans = 0; int c = max(a,get(b)); //puts("#"); printf("%d\n", c); static int SetName(123) = 10; printf("%d\n", SetName(123)); printf("%s\n",C(123)); } } int get(int x ) { return x + ++ans; }
posted on 2012-10-18 20:28 more think, more gains 阅读(212) 评论(0) 编辑 收藏 举报