我在名为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’

最佳答案

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

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
主c
#include "variables.h"

int main() {
    return 0;
}

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

关于c - 全局变量编译器错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11195487/

10-15 00:16