2

我将 PCLint-Check 9.0L 用于项目,并在对项目的所有 Lint-Object-Files(*.lob) 进行 Lint-Check 期间收到当前错误消息:

  • W:\DevWA\src\Platforms_h\TSPlatforms.h错误 14:符号 'TS_IntDisableAsm(void)' 先前定义(第 90 行,文件 W:\DevWA\src\Platforms_h\TSPlatforms.h,模块 TSPlatforms.c)

PCLInt 帮助手册在这里解释: Symbol 'Symbol' previous defined (Location) -- 命名对象已被第二次定义。

但是在第 90 行的 TSPlatforms.h 中的整个项目中只存在以下定义:

#define TS_IntDisable()     TS_IntDisableAsm()
__asm TS_IntStatusType TS_IntDisableAsm(void)
{
 .set noreorder
! "r3"
    mfmsr   r3
    wrteei  0
 .set reorder
}

TSPlatforms.h 多次包含在我项目的不同 C 文件中,但代码当然包含在重新定义保护中:

#if (!defined TSPLATFORMS_H)
#define TSPLATFORMS_H
...
#endif

有没有人提示我识别错误?

谢谢!海杰

4

1 回答 1

3

我的猜测:代码TS_IntDisableAsm()旨在内联。PCLint 没有意识到这一点,并认为它是在多个.c文件中定义的,并且当所有内容都链接在一起时会发生冲突。

在声明前添加static关键字应该会有所帮助。

于 2021-02-11T17:42:24.330 回答