我正在关注GTK introduction。
我的前21行是:
// https://developer.gnome.org/gtk3/stable/gtk-getting-started.html#id-1.2.3.5
#include <gtk/gtk.h>
static void
print_hello (GtkWidget *widget,
gpointer data)
{
g_print ("Hello World\n");
}
static void
activate (GtkApplication* app,
gpointer user_data)
GtkWidget *window;
GtkWidget *label;
GtkWidget *button_box;
GtkWidget *button;
window = gtk_application_window_new (app);
我正在使用makefile构建上面的gtk_hello02.c文件:
# gcc gtk_hello02.c -o gtk_hello02 `pkg-config --cflags --libs gtk+-3.0`
# https://stackoverflow.com/questions/28533059/how-to-use-pkg-config-in-make
CFLAGS=-g -Wall -Wextra $(shell pkg-config --cflags gtk+-3.0)
LDFLAGS=$(shell pkg-config --libs gtk+-3.0)
CC=gcc
SOURCES=$(wildcard *.c)
EXECUTABLES=$(patsubst %.c,%,$(SOURCES))
all: $(EXECUTABLES)
clean:
rm $(EXECUTABLES)
为什么会抱怨如下?
gtk_hello02.c: In function ‘activate’:
gtk_hello02.c:21:3: error: expected declaration specifiers before ‘window’
21 | window = gtk_application_window_new (app);
| ^~~~~~
据我所知,该窗口已经被声明为GTK窗口小部件。我记得我在没有Makefile的情况下编译该文件时没有问题。我不明白现在发生了什么变化。
这是没有有用的IDE的问题。
实际上,在这种情况下,GVIM或Code :: Block均未给出准确的错误。
最后,after a long configuration,我发现Visual Studio Code可以非常有效地发现丢失的{
,因此建议使用IDE来支持这种编码。参见下面的截图: