全局变量编译器错误

时间:2012-06-25 18:52:35

标签: c header-files

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

#ifndef VARIABLES_H
#define VARIABLES_H


extern int var1;
extern int var2;

#endif

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

编译器警告我以下内容:

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

每个变量都会继续,并以最终变量结束。

有什么问题?

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

file.h:

#ifndef FILE_H
#define FILE_H

void do_sth(void);  

void do_sth_else(void);

#endif

file.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’

1 个答案:

答案 0 :(得分:1)

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

extern GtkLabel *status_label;

但没有

#include <gtk/gtk.h>

位于文件顶部。当您从variables.h加入main.c时,您应该没问题,因为<gtk/gtk.h>包含在variables.h之前。在所有其他文件中,您将遇到问题,因为GtkLabel是未知类型。

要解决此问题,请在<gtk/gtk.h>文件的顶部添加variables.h。然后创建一个仅包含variables.h的简单项目和一个包含main.c的简单variables.h

的main.c

#include "variables.h"

int main() {
    return 0;
}

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