3. 三态运算符的使用

以前对三态运算符的使用场景没有感觉,直到一次对带参数的宏的判断时,才体会到其中的妙处

1.相当于人为设定宏结果,而不使用原来的数据(因为宏中使用的数据没有数据类型概念),这个过程相当于从无型到有型

#include <stdio.h>
#define myequal(a,b)   ( a == b)

int main()
{

  if(  myequal(3,20)?1:0 )
       printf("myequal(3,20)=%d, function=%s, line=%d \n",1,__FUNCTION__,__LINE__);
  else
       printf("myequal(3,20)=%d, function=%s, line=%d \n",0,__FUNCTION__,__LINE__);

  if(  myequal(3,20)?1:0 )
       printf("myequal(20,20)=%d, function=%s, line=%d \n",1,__FUNCTION__,__LINE__);
  else
       printf("myequal(20,20)=%d, function=%s, line=%d \n",0,__FUNCTION__,__LINE__);

  if(  "true" == myequal(3,20)?"true":"false" )           //gcc在此处会报警告,指针与整形不能相互转化
       printf("myequal(3,20)=%d, function=%s, line=%d \n",1,__FUNCTION__,__LINE__);
  else
       printf("myequal(3,20)=%d, function=%s, line=%d \n",0,__FUNCTION__,__LINE__);

  if(  "true" == (char* )myequal(3,20)?"true":"false" )   //强制转换,消除警告
       printf("myequal(3,20)=%d, function=%s, line=%d \n",1,__FUNCTION__,__LINE__);
  else
       printf("myequal(3,20)=%d, function=%s, line=%d \n",0,__FUNCTION__,__LINE__);

}

 

posted @ 2017-03-11 09:56  血洗女生宿舍  阅读(228)  评论(0编辑  收藏  举报