我的代码中有很多这样的错误。不知道为什么。以下是错误的示例:

In file included from mipstomachine.c:2:0,
                 from assembler.c:4:
rtype.c: In function ‘getRegister’:
rtype.c:6:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token

为了解释,我当前的文件布局有miptomachine.c,其中包括assembler.c,其中包括rtype.c
这是我的rtype.c的第4-6行
void rToMachine(char* line, char* mach, int currentSpot, instr currentInstruction,
                            rcode* rcodes)
{

对于rtype.c中声明的每个函数,我都会得到这样的错误
有什么想法吗?谢谢你们!

最佳答案

因为要在评论中正确地写上这段话需要很长时间,所以我把它作为一个回答。
在处理多个源文件时,应该将它们逐个编译成对象文件,然后在单独的步骤中将它们链接在一起,形成最终的可执行程序。
首先生成对象文件:

$ gcc -Wall -g file_1.c -c -o file_1.o
$ gcc -Wall -g file_2.c -c -o file_2.o
$ gcc -Wall -g file_3.c -c -o file_3.o

标志-c告诉GCC生成对象文件。标志-o告诉GCC如何命名输出文件,在本例中是对象文件。额外的标志-Wall-g告诉GCC生成更多的警告(总是很好,固定警告可能实际上会修复可能导致运行时错误的事情),并生成调试信息。
然后将文件链接在一起:
$ gcc file_1.o file_2.o file_3.o -o my_program

此命令告诉GCC调用链接器并将所有命名对象文件链接到可执行程序my_program
如果在多个源文件中需要结构和/或函数,则使用头文件。
例如,假设您有一个需要从多个源文件中使用的结构my_structure和函数my_function,则可以创建一个头文件header_1.h,如下所示:
/* Include guard, to protect the file from being included multiple times
 * in the same source file
 */
#ifndef HEADER_1
#define HEADER_1

/* Define a structure */
struct my_structure
{
    int some_int;
    char some_string[32];
};

/* Declare a function prototype */
void my_function(struct my_structure *);

#endif

此文件现在可以包含在如下源文件中:
#include "header_1.h"

09-26 18:54