我试图理解预处理器语法。它非常简单的代码行返回“ON”或“OFF”。但是我完全混淆了条件是什么?
我理解C的条件陈述如下:
<p><span rtenodeid="3" id="ms-rterangecursor-start"></span><span id="ms-rterangecursor-end"></span><span id="ms-rterangepaste-start"></span><span id="ms-rterangepaste-end"></span></p><div style="width: 1px; height: 1px; overflow: hidden;" class="ms-rte-pasteremove" contenteditable="true"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAW4AAACOCAIAAACe83XuAAACHklEQVR4nO3c0QnCUAxA0S7uIo6gQ+pfBkgvtOI5ZIOUS6Dwjg/cw5vbWKzvyD8I4A9JCRCQEiAgJUBASoCAlAABKQECx9U/sH/b1euDu3CV7EkJDCnZkxIYUrInJTCkZE9KYEjJnpTAkJI9KYEhJXtSAkNK9qQEhpTsSQkMKdmTEhhSsiclMKRkT0pgSMmelMCQkj0pgSEle1ICQ0r2pASGlOxJCQwp2ZMSGB5kPOXq9cFduEqAgJQAASkBAlICBKQECEgJEJASICAlQEBKgICUAAEpAQJSAgSkBAhICRCQEiAgJUBASoCAlAABKQECUgIEpAQISAkQkBIgICVAQEqAgJQAASkBAlICBKQECEgJEJASICAlQEBKgICUAAEpAQJSAgSkBAhICRCQEiAgJUBASoCAlAABKQECUgIEpAQIHI/nyxhjTo6rBAhICRCQEiAgJUBASoCAlAABKQECUgIEpAQISAkQkBIgICVAQEqAgJQAASkBAlICBKQECEgJEJASICAlQEBKgICUAAEpAQJSAgSkBAhICRCQEiAgJUBASoCAlAABKQECUgIEpAQISAkQkBIgICVAQEqAgJQAASkBAlICBKQECEgJEJASICAlQEBKgICUAAEpAQJSAgSkBAhICRCQEiAgJUBASoCAlAABKQECUgIEpAQISAkQkBIgICVAQEqAgJQAASkBAlICBKQECEgJEJASICAlQOAL8yemKmwohB0AAAAASUVORK5CYII=" alt=""></div>
如果条件?返回 - 替换? x:或者y这两行代码如下:
? x : y
我不明白这里必须满足什么条件?条件是a必须是null以外的其他东西吗?
答案 0 :(得分:1)
True
和Flase
可以更完美地呈现为1
或0
。我可以看到你宣布了
#define ONOFF(a) ((a) ? "ON" : "OFF")
此处的条件为(a)
,如果true
的值非零,则为a
,如果a
为0则为false
如果你写了
,那么在你的程序中意味着什么int a=1;
char *str;
str=ONOFF(a);
发生的替换是
int a=1;
char *str;
str=((a) ? "ON" : "OFF")// here a=1
此处a
是1
和。{
1
为true,str获取值ON
。如果a
为0,则str将获得值OFF
答案 1 :(得分:0)
要在此处添加一些上下文,条件操作符的第一个操作数必须是标量类型。现在,从章节§6.2.5开始,C11
,
算术类型和指针类型统称为标量类型。
因此,对于条件表达式,
0
)被评估为FALSE。 NULL
为FALSE,任何非NULL
为TRUE。答案 2 :(得分:0)
条件是a
必须评估为true
。在c中,这意味着a
必须是非零的表达式。
如果a
是指针类型,则NULL
为false
,其他任何值均为true
。
如果a
是整数类型,则0
为false
,其他任何值均为true
。
如果a
是浮点类型,则0
为false
,其他任何值均为true
。
如果a
是struct
或void
类型,则会出现编译错误。
答案 3 :(得分:0)
预处理器宏执行文本替换,因此a
不是变量 - 当宏为时,它只是括号中任何文本的占位符使用
您可以使用它来检查指针不是这样的:
printf("%s\n", ONOFF(ptr));
printf("%s\n", ONOFF(ptr != null)); // This is the same
或者您喜欢的任何其他类型的条件:
printf("%s\n", ONOFF(a > b));
printf("%s\n", ONOFF(a && b));
printf("%s\n", ONOFF(a == 1 || c == 4));
printf("%s\n", ONOFF(somefunction() != 0));
printf("%s\n", ONOFF((a == b && c == d) || (a == c && b == d));
printf("%s\n", ONOFF(my_bool_value));