C ++可能#define之前用过的东西

时间:2015-12-09 00:55:43

标签: c++ c-preprocessor

我想知道这是否可行(在项目中非常容易使用)

说:

// array size (COUNT)
int foo[COUNT];

// values
foo[0] = 1;
foo[1] = 43;
foo[2] = 24;

// define (or equivalent) its size at the end
#define COUNT 3    

(这是设计,因此每当我更改数组长度时,我都不必对其进行微调)

感谢。

编辑: 我正在寻找的是在数组填充值后定义数组的大小。在示例中,我只知道在放置值时它是3。所以我可以添加4个" foo" s,只需要更改下面的#define。

下一步编辑:

// this is the idea, can this be possible? or even a "forward" declared
int foobar = THEVALUE

// way further down
#define THEVALUE 5;

2 个答案:

答案 0 :(得分:3)

int foo[] = {1, 43, 24};
int const count = 3;    // See the SO array FAQ for how to compute this.

一种简单的类型安全的计算大小的方法,在SO数组常见问题中没有提到(因为它是在C ++ 11之前编写的),是

int const count = end( foo ) - begin( foo );

其中endbegin是来自std标题的<iterator>命名空间函数。

有关其他方式,请参阅SO array FAQ

通常,在现代C ++中,最好在原始数组上使用std::array(固定大小)和std::vector(动态大小)。这更安全,功能更丰富,特别是分配和轻松检查大小的能力。遗憾的是,std::array不支持从初始值设定项推断出的大小,因此即使数组大小不变,您也必须使用std::vector

vector<int> foo = {1, 43, 24};

// foo.size() gives you the size at any moment.

答案 1 :(得分:1)

您可以使用初始化列表初始化数组,然后您根本不需要知道它的大小:

int foo[] = { 1, 43, 24 }
int size = sizeof(foo) / sizeof(int); // if you do need to know size

编辑: 对于更惯用的C ++ 11,请参阅上面的答案:)