2

我在名为 variables.h 的头文件中定义了一些外部变量,如下所示:

#ifndef VARIABLES_H
#define VARIABLES_H


extern int var1;
extern int var2;

#endif

然后我将它添加到我的源文件中。

编译器警告我以下内容:

error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘var1’

这对每个变量都进行,并在最终变量处结束。

问题是什么?

每个变量的错误都出现在 variables.h 中。

文件.h:

#ifndef FILE_H
#define FILE_H

void do_sth(void);  

void do_sth_else(void);

#endif

文件.c:

#include "variables.h"

/* Quit */
void do_sth(void) { 
/* do sth */
}

void do_sth_else(void) { 
/* do sth else */
}

就这样。错误是:

error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘var1’

error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘var2’
4

1 回答 1

1

您发布的标题的一个明显问题是它们声明了可能不在范围内的类型的变量。例如,您声明

extern GtkLabel *status_label;

但没有

#include <gtk/gtk.h>

在文件的顶部。当您包含variables.hfrommain.c时,您应该可以,因为<gtk/gtk.h>包含在前面variables.h。在所有其他文件中,您都会遇到问题,因为GtkLabel是未知类型。

要更正此问题,请在文件<gtk/gtk.h>顶部variables.h包含。然后创建一个简单的项目,其中包含variables.h和一个简单main.c的,包括variables.h

主程序

#include "variables.h"

int main() {
    return 0;
}

继续添加缺少的标头,直到这个简单的main.c编译。然后将您添加variables.h到实际项目中,问题应该会消失。

于 2012-06-25T19:51:06.177 回答