【问题标题】:expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token在“{”标记之前预期“=”、“,”、“;”、“asm”或“__attribute__”
【发布时间】:2013-04-26 04:47:45
【问题描述】:

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

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 中声明的每个函数,我都会收到这样的错误

有什么想法吗?谢谢大家!

【问题讨论】:

  • 消息说rtype.c: In function ‘getRegister’:,但您没有显示相关代码。您能提供更多背景信息吗?
  • 你错过了} 我猜这个功能之前的一些地方。
  • 您有包含其他源文件的源文件?这并不是真正推荐的,我实际上会说这是错误的。将函数原型和结构放在头文件中,并在需要时将它们包含在源文件中,然后将源文件链接在一起。
  • @Jeyaram 也可能缺少分号。
  • 如果报告的行显然没有错误,并且尽管 Jeyaram 有洞察力,但您仍然无法发现它,您可以尝试使用 #if 0 / #endif 注释掉您的代码部分 - 如果在你找到中断的地方之前,它仍然不会编译更多的注释。

标签: c gcc token


【解决方案1】:

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

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

首先制作目标文件:

$ 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"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多