我在我的一个文件中使用了一对全局变量,与两个不同文件中.c
的单个声明相匹配(好吧,一个文件,两种方式预处理)。一种是公用的,一种是私人使用的。两者都是变量。extern
.h
.h
const
我只想初始化.c
文件中的一个变量,然后将第二个变量分配给相同的内容。以下是目前文件的相关内容.c
:
struct List_methods const List = {
.create = List__create,
.create_naughty = List__create_naughty,
// …
};
struct List_methods const Paws__List = List;
…以及相应的.h:
#if defined(EXTERNALIZE)
# define List_methods Paws__List_methods
# define List Paws__List
#endif
// …
struct List_methods {
list (*create) (void);
list (*create_naughty) (void);
// …
} const extern List;
#if defined(EXTERNALIZE)
# undef List_methods Paws__List_methods
# undef List Paws__List
#endif
这里的目标是确保当.h
包含在EXTERNALIZE
定义中时,包含文件可以访问Paws__List
变量,extern
'd 到我的.c
文件中的定义。但是,如果在没有该定义的情况下包含它,他们将获得对extern
'd的访问权限List
(我打算在我的内部文件中使用它,并在用户需要时提供#include
)。
但是,Paws__List = List
分配在我的编译器中爆炸了,出现以下错误:
Source/Paws.o/list/list.c:32:40: error: initializer element is not a
compile-time constant
struct List_methods const Paws__List = List;
^~~~
我正在寻找任何可以帮助我完成上述工作的帮助(也就是说,const
在我的文件中为同一个结构定义两个名称,以便标题.c
可以引用一个或另一个。).h