1

我的代码中出现大量此类错误。想不通为什么。以下是错误示例:

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

为了解释,我当前的文件布局有 mipstomachine.c,其中包括 assembler.c,其中包括 rtype.c

这是我的 rtype.c 的第 4-6 行

void rToMachine(char* line, char* mach, int currentSpot, instr currentInstruction,
                            rcode* rcodes)
{   

对于 rtype.c 中声明的每个函数,我都会收到这样的错误

有任何想法吗?多谢你们!

4

1 回答 1

4

由于在评论中正确书写会很长,因此我将其添加为答案。

在处理多个源文件时,应将它们一一编译成目标文件,然后在单独的步骤中将它们链接在一起,形成最终的可执行程序。

首先制作目标文件:

$ 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_functionheader_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"
于 2013-04-26T04:58:45.637 回答