我的代码中有很多这样的错误。不知道为什么。以下是错误的示例:
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"