一直被我忽视的宏

#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  阅读(210)  评论(0编辑  收藏  举报

导航