如何编译器转换为(foo)?

时间:2012-06-18 17:22:08

标签: c compiler-construction

如果我省略了语句中的运算符,那么while(foo)编译器会将其转换为while(foo != NULL || *foo != '\0' || foo != 0)while(!foo)或类似的东西吗?

怎么做到了?

2 个答案:

答案 0 :(得分:7)

while (condition)只检查condition是否为非零。

因此这两者是等价的:

while (foo)
while (foo != 0)

答案 1 :(得分:1)

NULL,'\ 0'和0在功能上是相同的,只是它们用于不同的类型。

因此,如果foo是int,while (foo)表示while (foo!=0)

如果foo是指针,while (foo)表示while (foo!=NULL)

等。但编译器永远不会检查foo指向的值。