这在语法上是否正确?

时间:2012-09-06 15:28:49

标签: c

我在其中一个源文件中有代码如下:

#include <stdio.h>
#include <math.h>

int a ;
int b = 256 ;
int c = 16 ;
int d = 4 ;

int main() {

    if ((d <= (b) && (d == ( c / sizeof(a))))
    {
        printf("%d",sizeof(a) );
    }
    return 0;

} 

我删除了演员表并简化了数据名称。 sizeof(a)可以视为4.我想知道if语法是否有效,如果是,为什么不执行?

PS:由于时间限制,我没有长时间坐下来。如果您在代码中发现幼稚错误,请原谅我。

6 个答案:

答案 0 :(得分:4)

你试过编译吗?

你的if语句还需要一个)。那或简化为:

if ((d <= b) && (d == c / sizeof(a)))

你的printf语句应该对C99使用“%zu \ n”,尽管it's complicated

答案 1 :(得分:2)

IMO缺少一个结束括号。我用垂直括号对齐技术打开你的if。

#include <stdio.h>
#include <math.h>

int a ;
int b = 256 ;
int c = 16 ;
int d = 4 ;

int main() {

    if (
        (
         d <= (b) && (
                      d == (
                             c / sizeof(a)
                           )
                     )
        )
       //Here needs another closing parantheses
    {
        printf("%d",sizeof(a) );
    }
    return 0;

}

实际上你可以在你的代码段中删除一些括号。

答案 2 :(得分:1)

尝试在printf声明中添加换行符:

printf("%d\n", sizeof a);

标准输出通常是缓冲的,因此输出并不总是立即显示在控制台上,除非有换行符或在fflush(stdout);调用后添加printf

答案 3 :(得分:1)

((d <= (b) && (d == ( c / sizeof(a)))) 

(之前查看额外的b

( (d <= b) && (d == (c/sizeof(a))))

答案 4 :(得分:1)

您已忘记在第11行关闭一个括号,您已打开六个并关闭五个。

答案 5 :(得分:1)

我认为你的if语句有问题,它应该是这样的

if ( (d <= b) && (d == ( c / sizeof(a))))

你有一个额外的(在'b'的左侧