Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
__asm和PCLint 9.0升错误14:符号';国际灾难主义(无效)和#x27;先前定义的_C_Assembly_Misra_Pc Lint_Wind River Workbench - Fatal编程技术网

__asm和PCLint 9.0升错误14:符号';国际灾难主义(无效)和#x27;先前定义的

__asm和PCLint 9.0升错误14:符号';国际灾难主义(无效)和#x27;先前定义的,c,assembly,misra,pc-lint,wind-river-workbench,C,Assembly,Misra,Pc Lint,Wind River Workbench,我正在为项目使用PCLint Check 9.0L,并在对项目的所有Lint对象文件(*.lob)进行Lint检查时收到当前错误消息: W:\DevWA\src\Platforms\u h\TSPlatforms.h错误14:先前定义的符号“TS\u IntDisableAsm(void)”(第90行,文件W:\DevWA\src\Platforms\u h\TSPlatforms.h,模块TSPlatforms.c) PCLInt帮助手册在此处解释: 符号“Symbol”先前定义(位置)-

我正在为项目使用PCLint Check 9.0L,并在对项目的所有Lint对象文件(*.lob)进行Lint检查时收到当前错误消息:

  • W:\DevWA\src\Platforms\u h\TSPlatforms.h错误14:先前定义的符号“TS\u IntDisableAsm(void)”(第90行,文件W:\DevWA\src\Platforms\u h\TSPlatforms.h,模块TSPlatforms.c)
PCLInt帮助手册在此处解释: 符号“Symbol”先前定义(位置)--命名对象已被第二次定义

但90号线TSH平台内的整个项目仅存在以下定义:

#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
有人给我一个提示来识别错误吗

谢谢!
HJ

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


在声明前添加一个
静态
关键字应该会有所帮助。

或者
内联
关键字?我假设它是由
\uu asm
暗示的,如果
\uu asm
暗示
内联
,那么我会向PCLint的供应商注册一个bug-假设这个问题是由于PCLint执行某种全局操作造成的正在检查(PCLint似乎支持该选项)。@MichaelBurr我真的不知道。我们不了解编译器,我个人也不使用PCLint。这就是为什么我以“我的猜测…”开始回答。从代码来看,
\u asm
似乎暗示着
内联
。如果没有,那么这段代码与.h文件中的内容无关。然后,我添加了“wind river workbench”标签。如果我错了,请随意删除它。作为旁白:你在使用MSVC吗?文档似乎表明
\uu asm
关键字的语法无效(尽管我已经很久没有使用它了)。文档中指出,asm后面必须跟一条汇编指令或一个大括号:这就是为什么如果可以避免的话,我们永远不应该在h文件中声明函数的主要原因。非常神秘且难以解决的链接器错误。