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__); }