如何为 C 头文件中声明的外部结构赋值或修改?
How do I assign values to or modify an extern struct declared in C header file?
我在头文件中声明了 2 个 termios 结构 aba.h
:
extern struct termios cookedInput, rawInput;
然后在一个函数中,我尝试像这样更改 stdin_prep.c
中的值:
tcgetattr(STDIN_FILENO, &cookedInput);
rawInput = cookedInput;
cfmakeraw(&rawInput);
gcc -Wall -Werror -Wextra *.c
给我以下错误:
In function stdin_change.c
stdin_change.c:(.text+0x26): undefined reference to 'rawInput'
stdin_change.c:(.text+0x55): undefined reference to 'cookedInput'
我的 main.c
.
调用了 stdin_prep();
和 stdin_change("raw");
函数
我尝试了以下几种解决方案:
and C: undefined reference to a variable when using extern 但是出现了一堆不同的错误。
我附上了我的终端机图片。
WSL-Ubuntu-18.04-Screenshot
声明一个对象并不会导致它存在。您需要实际定义它。放
struct termios rawInput;
可选地在您的 .c
文件之一中的顶层(不在任何函数内)使用初始化程序。
这些
extern struct termios cookedInput, rawInput;
是两个类型为 struct termios 的对象的前向声明,而不是它们的定义。
您必须在某些模块中定义对象。
例如,您可以在模块中定义 main.
struct termios cookedInput, rawInput;
如果您不为对象明确指定初始值设定项,那么它们将被初始化为
struct termios cookedInput = { 0 }, rawInput = { 0 };
我在头文件中声明了 2 个 termios 结构 aba.h
:
extern struct termios cookedInput, rawInput;
然后在一个函数中,我尝试像这样更改 stdin_prep.c
中的值:
tcgetattr(STDIN_FILENO, &cookedInput);
rawInput = cookedInput;
cfmakeraw(&rawInput);
gcc -Wall -Werror -Wextra *.c
给我以下错误:
In function stdin_change.c
stdin_change.c:(.text+0x26): undefined reference to 'rawInput'
stdin_change.c:(.text+0x55): undefined reference to 'cookedInput'
我的 main.c
.
stdin_prep();
和 stdin_change("raw");
函数
我尝试了以下几种解决方案:
我附上了我的终端机图片。 WSL-Ubuntu-18.04-Screenshot
声明一个对象并不会导致它存在。您需要实际定义它。放
struct termios rawInput;
可选地在您的 .c
文件之一中的顶层(不在任何函数内)使用初始化程序。
这些
extern struct termios cookedInput, rawInput;
是两个类型为 struct termios 的对象的前向声明,而不是它们的定义。
您必须在某些模块中定义对象。
例如,您可以在模块中定义 main.
struct termios cookedInput, rawInput;
如果您不为对象明确指定初始值设定项,那么它们将被初始化为
struct termios cookedInput = { 0 }, rawInput = { 0 };