错误:在C中的’*’标记之前预期’=’,’,’,’;’,’asm’或’__attribute__’

我有以下声明

FILE *fptr; FILE *optr;

在algo.h中,我在main.c中使用main来打开这些文件。 如果我将声明放在头文件中,我会收到上述错误。 如果我把它放在main.c中,那么我会得到多个定义错误

src\main.o:main.c:(.bss+0xc88): multiple definition of rcount' src\new_algo.o:new_algo.c:(.bss+0xc88): first defined here src\main.o:main.c:(.bss+0xc8c): multiple definition of condi' src\new_algo.o:new_algo.c:(.bss+0xc8c): first defined here

有点听起来像你(1)没有包含你正在使用FILE ,和/或(2)在你的标题中有一些非static可执行代码或非extern变量定义(和/或是#include一个C文件)。

第一个通常会导致不定义FILE (或者在某些情况下将typedef定义为不存在的类型)。 第二个会导致在包含文件的每个翻译单元中定义填充内容,这会使链接器混淆。

修复:(1)在使用FILE的文件中#include ,以及(2)将标题中的共享定义移动到.c文件中(和/或将它们声明为staticextern ),并且只有#include .h文件。

你在algo.h中所拥有的是一个定义而不是一个声明。 如果你有FILE * fptr; FILE * optr; 在源文件和头文件中,您将两次声明变量。

你需要:

algo.h

 extern FILE *fptr; extern FILE *optr; 

algo.c

 FILE *fptr; FILE *optr; 

听起来你不包括stdio。 加

 #include  

在你的头文件上面的那些声明。

链接器错误与您发布的FILE变量无关。

您的源有两个变量,名为rcountrcount ,根据链接器在两个源文件中定义。 我猜,原因是你在两个源文件中包含的头文件中定义了这些变量。 一些旧的编译器仍然无法处理。