我在我的一个文件中使用了一对全局变量,与两个不同文件中.c的单个声明相匹配(好吧,一个文件,两种方式预处理)。一种是公用的,一种是私人使用的。两者都是变量。extern.h.hconst
我只想初始化.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