__asm 和 PCLint 9.0L 错误 14:符号 'TS_IntDisableAsm(void)' 先前已定义

__asm and PCLint 9.0L Error 14: Symbol 'TS_IntDisableAsm(void)' previously defined

我在项目中使用 PCLint-Check 9.0L,在对项目的所有 Lint-Object-Files(*.lob) 进行 Lint-Check 时得到了当前错误消息:

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

但是在TSPlatforms.h第90行的整个Project中只有如下定义:

#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

有没有人提示我找出错误?

谢谢! 胡锦涛

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

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