C - problem with const - error: initializer element is not constant
C - problem with const - error: initializer element is not constant
我尝试在我的 buttons.c
文件中添加全局变量,但出现错误 - initializer element is not constant
。示例 headers.h
文件
struct MainStruct {
GtkEntryBuffer *buffer;
GtkWidget *entry;
GtkWidget *label;
};
extern struct MainStruct *p;
extern const char *text_entry;
void lower_button_clicked(GtkWidget *lowerbutton);
当文件 main.c 调用文件 buttons.c 时,我无法定义变量 text_entry
.我做错了什么?
buttons.c
#include <gtk/gtk.h>
#include "headers.h"
const char *text_entry = gtk_entry_buffer_get_text(p -> buffer); // is not constant, why?
void lower_button_clicked(GtkWidget *lowerbutton)
{
printf("%s\n", text_entry);
}
看到很多类似的问题都在讲static,但是
static const char *text_entry = gtk_entry_buffer_get_text(p -> buffer);
不工作。
如何将此变量定义为全局变量?避免类似功能重复
来自C标准(6.7.9初始化)
4 All the expressions in an initializer for an object that has static
or thread storage duration shall be constant expressions or string
literals.
并在此声明中
const char *text_entry = gtk_entry_buffer_get_text(p -> buffer);
初始值设定项不是常量表达式。所以编译器报错。
还要注意这些声明
extern const char *text_entry;
接下来是
static const char *text_entry = /*...*/;
互相矛盾。第一个声明将变量 text_entry 声明为具有外部链接,而第二个声明将变量声明为具有内部链接。
我尝试在我的 buttons.c
文件中添加全局变量,但出现错误 - initializer element is not constant
。示例 headers.h
文件
struct MainStruct {
GtkEntryBuffer *buffer;
GtkWidget *entry;
GtkWidget *label;
};
extern struct MainStruct *p;
extern const char *text_entry;
void lower_button_clicked(GtkWidget *lowerbutton);
当文件 main.c 调用文件 buttons.c 时,我无法定义变量 text_entry
.我做错了什么?
buttons.c
#include <gtk/gtk.h>
#include "headers.h"
const char *text_entry = gtk_entry_buffer_get_text(p -> buffer); // is not constant, why?
void lower_button_clicked(GtkWidget *lowerbutton)
{
printf("%s\n", text_entry);
}
看到很多类似的问题都在讲static,但是
static const char *text_entry = gtk_entry_buffer_get_text(p -> buffer);
不工作。 如何将此变量定义为全局变量?避免类似功能重复
来自C标准(6.7.9初始化)
4 All the expressions in an initializer for an object that has static or thread storage duration shall be constant expressions or string literals.
并在此声明中
const char *text_entry = gtk_entry_buffer_get_text(p -> buffer);
初始值设定项不是常量表达式。所以编译器报错。
还要注意这些声明
extern const char *text_entry;
接下来是
static const char *text_entry = /*...*/;
互相矛盾。第一个声明将变量 text_entry 声明为具有外部链接,而第二个声明将变量声明为具有内部链接。