g++如何优雅的实现数组的指定初始化(Designated Initializers)

zodiac1111 2012-11-29 12:13:09
gcc的指定初始化实现: http://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html
This extension is not implemented in GNU C++.
 int a[] = {
[0] = 9,
[2] = 29,
[40] = 15 ,
[70...255] = 67
};

对于结构体的指定初始化(Designated Initializers) g++还可以使用gnu的扩展实现,
但是对于数组的指定初始化g++直接说"这还没实现呢 = = ".
现在的代码是C++的,使用g++编译.我想在里面实现数组的指定初始化.
显然(实践过)的,仅用 extern "C" 在cpp文件中包括以上c代码是不能实现的.

现在我的解决方案是:
1.c (包含以上代码)
main.cpp (原来的c++代码)
在main.cpp中使用 extern int a[],说明在别的文件中定义.
然后:
gcc -c 1.c -o 1.o
g++ -c main.cpp -o main.o
g++ 1.o main.o -o main.out


但是总觉得extern让g++失去了一些检查,有潜在的危险.重构也不方便,
希望前辈们有什么好的经验方法,指导一下.给出比较正确的方法,不仅仅是实现,使代码易于维护.

...全文
451 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2012-11-29
  • 打赏
  • 举报
回复
语法糖的甜度是有限的。
ri_aje 2012-11-29
  • 打赏
  • 举报
回复
确实是,不过你要的功能在 c 里面也不存在,只是 gcc 一家的非标准扩展而已。显然把这种功能搁在 c++ 里面会引起很多麻烦,特别是 side-effect 的问题,以至于得不偿失,因此 g++ 才不做的。c++11 里的 uniform initialization 已经是最接近你要求的了,否则就只能找库了,可以试试 std::valarray。
zodiac1111 2012-11-29
  • 打赏
  • 举报
回复
这种方式不能很方便的定义这种数组吧:
a[0] = 1,
a[2]~a[20] = 9,
a[21] = 2,
a[22]~a[254] = nil(不关心),
a[255] = 4
有点稀疏矩阵的感觉 = = 总不能int a[]{1,9,9,9,9,9,9....9,9,9,9,9,2,X,X,X,X,X,X,.....X,X,X,255} 容易数错,有木有
引用 1 楼 ri_aje 的回复:
最简单的是使用支持 c++11 的 g++ 版本,然后这么初始化数组 C/C++ code?12 int const a [10] {1,2,3,4,5}; 这中方法也能用在 ctor-initializer 里面。
ri_aje 2012-11-29
  • 打赏
  • 举报
回复
最简单的是使用支持 c++11 的 g++ 版本,然后这么初始化数组

 int const a [10] {1,2,3,4,5};
这中方法也能用在 ctor-initializer 里面。

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧