在C中转发声明静态C结构实例

在C中转发声明静态C结构实例,第1张

概述我正在编写一个代码生成器,实际上是一个数据生成器,它将生成这种形式的数据结构(显然,实际的数据结构更精细): typedef struct Foo { int a; struct Foo* foo;} Foo;extern Foo f1;extern Foo f2;Foo f1 = {1, &f2};Foo f2 = {2, &f1}; 这对于我尝试过的所有C和C编译器都是可 我正在编写一个代码生成器,实际上是一个数据生成器,它将生成这种形式的数据结构(显然,实际的数据结构更精细):

typedef struct Foo {  int a;  struct Foo* foo;} Foo;extern Foo f1;extern Foo f2;Foo f1 = {1,&f2};Foo f2 = {2,&f1};

这对于我尝试过的所有C和C编译器都是可移植的.

我想将这些struct实例声明为static,以免污染全局变量空间,如:

typedef struct Foo {  int a;  struct Foo* foo;} Foo;static Foo f1;static Foo f2;static Foo f1 = {1,&f2};static Foo f2 = {2,&f1};

虽然这适用于gcc和可能所有的C编译器,但上面的代码不适用于C编译器并导致编译错误:

error: redeFinition of ‘Foo f1’error: ‘Foo f1’ prevIoUsly declared

我理解为什么在C中发生这种情况.是否有一个简单的解决方法,不涉及在运行时使用代码来实现可移植到所有C编译器的相同效果,而无需使用C编译器来编译某些文件?

解决方法 这应该使用C或C进行编译,并为您提供相同的名称,以便在两个编译器中访问相同的内容.

#ifdef __cplusplus namespace // use anonymous namespace to avoID poluting namespace. {    struct StaticFoos    {       static Foo f1;       static Foo f2;    };    Foo StaticFoos::f1 = {1,&StaticFoos::f2};    Foo StaticFoos::f2 = {2,&StaticFoos::f1}; } static const &Foo f1 = StaticFoos::f1; static const &Foo f2 = StaticFoos::f2;#else static Foo f1 = {1,&f2_}; static Foo f2 = {1,&f1_};#endif

现在在C和C中,您可以访问f1和f2.

总结

以上是内存溢出为你收集整理的在C中转发声明静态C结构实例全部内容,希望文章能够帮你解决在C中转发声明静态C结构实例所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/1223126.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存