【问题标题】:conflicting declarations for variable, type redeclared变量声明冲突,类型重新声明
【发布时间】:2014-09-04 11:36:48
【问题描述】:

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

提前致谢

错误和警告:

Looplicht v2.0.c:226:警告:(361)函数声明为隐式int Looplicht v2.0.c:237:错误:(984)类型重新声明 Looplicht v2.0.c:237:错误:(1098)变量“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;
}

【问题讨论】:

  • 改变函数定义的顺序。
  • 什么是“高科技-c”?只是好奇...
  • @AdrianoRepetti Hi-TECH Software 是一家生产针对嵌入式系统的 C 编译器的公司。它们已经存在了很长时间(我记得在我的 ZX Spectrum 上,看到杂志上刊登了 Hitech C 广告)
  • @joachim:你的意思是我必须将函数“integer_reverse”放在函数“mode_single_right”之上?
  • 遗憾的是,我使用 Hitech C 的一个版本来为更现代的 Z80 设备编码;越少说越好。

标签: c hi-tech-c


【解决方案1】:

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

unsigned int integer_reverse( unsigned int input_br );

如果你调用一个尚未声明的函数,在 C89 中,编译器假定声明是:

int integer_reverse();

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

【讨论】:

    【解决方案2】:

    要么添加前向声明,如

    unsigned int integer_reverse (unsigned int input_br);

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

    【讨论】:

    • 如果我选择定义函数,我可以将“未签名”留在函数本身吗?
    • @maikel 你为什么要这么做?
    • 我不知道.. 只是询问整数是否是无符号整数,以防函数在程序开始时定义
    • @maikel 认真的?? :-) 如果您没有准确指定想要的,那么请准备好迎接编译器可能呈现给您的惊喜。 JA,请准确提及您想要/需要的内容。
    • 对不起,就像我说我对 c 编程很陌生,我犯了一些像这样的愚蠢错误:/
    猜你喜欢
    • 2018-11-29
    • 1970-01-01
    • 2017-07-15
    • 1970-01-01
    • 2018-12-12
    • 2017-07-20
    • 2021-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多