变量的冲突声明,类型重新声明

时间:2014-09-04 11:36:48

标签: c hi-tech-c

我有这些错误和警告......我对编程很新,我不知道这意味着什么。你们可以看看这个并告诉我我做错了吗?

提前致谢 Maikel

错误和警告:

Looplicht v2.0.c:226: warning: (361) function declared implicit int
Looplicht v2.0.c:237: error: (984) type redeclared
Looplicht v2.0.c:237: error: (1098) conflicting declarations for variable "integer_reverse" (Looplicht v2.0.c:237)

有错误的代码(我已在说明中放置了错误的编号):

void mode_single_right() {

output_integer = 0x0001;        //start right

    for (unsigned char i = 0; i < number_of_outputs; i++) {
        if (jump) {
            jump = 0;

            output_integer = integer_reverse(output_integer);       //line 226
            switch_outputs(output_integer);                         
            output_integer = (output_integer << 1);                 
        } else {
            i--;
        }
    }


}

unsigned int integer_reverse (unsigned int input_br) {          //line 237

unsigned int output_br = 0;
bit bit_in_reverse = 0;

for (unsigned char ibr = 0; ibr < 16; ++ibr) {

    bit_in_reverse = input_br & 0x01;
    output_br |= bit_in_reverse;
    input_br >>= 1;
    output_br <<= 1;
}
return output_br;
}

2 个答案:

答案 0 :(得分:3)

你应该在调用之前声明一个函数。在第226行之前的某个点(最好在任何函数之外),包括原型:

unsigned int integer_reverse( unsigned int input_br );

如果在C89中调用一个尚未声明的函数,编译器会认为声明是:

int integer_reverse();

然后它会遇到你的函数头(它是原型格式,因此它算作原型)并且编译器检测到这个原型与你原来的隐式声明不兼容。

答案 1 :(得分:0)

添加像

这样的前向声明

unsigned int integer_reverse (unsigned int input_br);

在调用[using]之前定义函数。