带有pow()的c语法错误

时间:2014-03-30 22:24:57

标签: c

无法弄清楚我遇到的语法错误,我有正确的标题,所以不知道

int get_block_size(int num) {
    int i= 0;

    for (i=0; num < pow(2.0,double(i)); ++i);

    return int(pow(2.0,double(i)));
}

我得到的错误

sidhuh@ius:~ $ gcc -o b buddy.c
buddy.c: In function `get_block_size':
buddy.c:24: error: syntax error before "double"
buddy.c:24: error: syntax error before ')' token

2 个答案:

答案 0 :(得分:5)

idouble的演员表不正确:在C中,您将类型放在括号中,如下所示:

for (i=0; num < pow(2, (double)i); ++i)
    ;
return (int)(pow(2,(double)i));

这应该可以解决语法错误。但是,这不是最有效的 - 你可以通过向左移1获得2的幂,所以不要写

(int)pow(2, i)

你可以写

1 << i;

这与你在k之后写k个零后在十进制系统中获得1 - 十次幂的原因相同。

注意:看起来你正试图将数字四舍五入到最接近的两倍。有一个“有点笨拙的黑客”,可以帮助您减少操作和没有循环。按照说明here

unsigned int v; // compute the next highest power of 2 of 32-bit v
v--;
v |= v >> 1;
v |= v >> 2;
v |= v >> 4;
v |= v >> 8;
v |= v >> 16;
v++;

答案 1 :(得分:1)

int是一个类型,而不是一个函数,所以我不认为编译器喜欢int(...你的意思是类似于

(int) pow(2.0, (double) i) 

可能?这引发了其他错误条件,但它至少在语法上是正确的。