【问题标题】:Easiest way to get two arrays have the same length? [duplicate]让两个数组长度相同的最简单方法? [复制]
【发布时间】:2013-10-15 01:27:07
【问题描述】:

我的项目中有两个数组。一种是静态 const 类型,在不同项目中包含或多或少的条目,例如

static const array_A[] = { ... };

我不喜欢array_A[N] = { ... } 的风格,因为我不想手动计算数组的长度。

还有一个数组B,要求长度和A一样。

一些编译器(如armcc)支持以下技巧

const int N = sizeof(array_A) / sizeof(array_A[0])
static const array_B[N];

但是这个技巧在 gcc 编译器上失败了。那么还有其他简单的方法吗?

【问题讨论】:

  • 失败是什么意思?很明显works for me.
  • 您在两个数组声明中都缺少类型名称。
  • @ZacWrangler,他标记了 C,而不是 c++。 C 中的代码使用 clang 编译,而不是 gcc。

标签: c arrays declare


【解决方案1】:

有趣的是:

int a[] = {1, 2, 3};
const int N = sizeof(a)/sizeof(a[0]);
const int b[N];

用 clang 编译,不使用 gcc 4.2.1 编译:

error: variably modified ‘b’ at file scope

OP 要求的是 C,而不是 C++,因此 gcc 的修复是

int a[] = {1, 2, 3};
const int b[sizeof(a)/sizeof(a[0])];

【讨论】:

  • 它确实有效。所以这应该是gcc的bug?
  • 我不会称它为 gcc 错误。 C 语言多年来一直在发展,编译器努力跟上并添加自己的扩展。我不知道这个特性可能在也可能不在任何 C 规范中。如果您有兴趣,可以询问 SO 是否在任何官方 C 规范中找到此功能。
猜你喜欢
  • 2012-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-24
  • 1970-01-01
  • 2012-07-29
  • 2013-08-01
  • 1970-01-01
相关资源
最近更新 更多