c166 16位微处理器的c函数中存在编译器错误



目前,我正在尝试解决一个非常旧的c166 16位微处理器代码中的几个问题。我对c有基本的知识,但对微处理器或c166没有,所以我不知道编译器想告诉我什么。也许你们中的一些人知道这里发生了什么/也就是帮助我解决这个编译器错误:

代码

void ChecksummenBerechnenFar(word wAnzahlByte, byte far* bP_AnfangSpeicher)
{
word wChecksum;
word wCount;
for(wChecksum=0xFFFF, wCount=0; wCount < (wAnzahlByte-2); wCount+=1 ) {
wChecksum -= *bP_AnfangSpeicher++;
}
*bP_AnfangSpeicher = (byte) (wChecksum & 0x00FF);
bP_AnfangSpeicher++;
*bP_AnfangSpeicher = (byte) (wChecksum >>8);
}

错误

compiling CHECKS.C...
CHECKS.C(8): error C25: syntax error near 'wAnzahlByte'
CHECKS.C(9): warning C35: 'ChecksummenBerechnenFar': uses old-style declarator
CHECKS.C(10): error C25: syntax error near 'wChecksum'
CHECKS.C(10): warning C34: 'wChecksum': missing declaration specifiers
CHECKS.C(11): warning C34: 'wCount': missing declaration specifiers
CHECKS.C(11): error C42: 'wCount': not in formal parameter list
CHECKS.C(12): error C25: syntax error near 'for'
CHECKS.C(12): error C25: syntax error near '='
CHECKS.C(12): error C25: syntax error near '<'
CHECKS.C(12): error C25: syntax error near '-'
CHECKS.C(12): error C25: syntax error near '+='
CHECKS.C(13): error C25: syntax error near '-='
CHECKS.C(13): error C25: syntax error near '++'
CHECKS.C(16): error C67: 'byte': undefined identifier
CHECKS.C(17): error C25: syntax error near '++'
CHECKS.C(18): error C53: redefinition of 'bP_AnfangSpeicher'
CHECKS.C(18): error C67: 'byte': undefined identifier
CHECKS.C(20): error C25: syntax error near '}'
CHECKS.C(20): error C7: compilation aborted

您似乎缺少包含的头文件。某些数据类型可能已在某处使用typedef重命名。如果您在Linux主机上,我建议您安装";ctags";浏览代码以查找定义和声明。现在,您可以在源代码目录中执行grep"find -name *.h | grep -rn typedef | grep word"这将为您提供一个文件名和行号。打开文件位置,转到行号检查是否是您要查找的定义。如果是,则包括该文件。

评论员已经提到单词和字节不是标准的C,这是真的。但您不会看到"未声明的标识符"错误。

我认为符号word和byte已经被#定义为空字符串。也许#defines试图根据您编译的体系结构选择合适的定义,但由于您使用的是一个它无法识别的新体系结构,它们会被转换为空白字符串。您可能需要通过-D开关来传递某种值,以识别目标体系结构,尤其是当它与您正在编译的体系结构不同时

由于类型被空字符串替换,编译器认为您使用的是古老的K&R函数定义语法,这就是您看到这些错误的原因。

尝试使用-E进行编译以转储预处理器输出,然后查看结果。

最新更新