我如何#define C中的数组?

时间:2010-09-08 21:05:41

标签: c c-preprocessor

以下语法是否在C中定义数组有效语法?

#define array[] { \
for (j=0; j<N_frequencysteps;j++)  \
{ \
array[j] = (function); \
} \
}

如果没有,我如何在C中定义数组?

2 个答案:

答案 0 :(得分:3)

这取决于您如何定义'有效语法'。

  • C预处理器会将其接受为类似对象的宏。

  • C编译器不接受输出为合法C。

考虑一个调用:

array[23];

C编译器看到:

[] { for (j=0; j<N_frequencysteps;j++) { array[j] = (function); } } [23];

这是胡言乱语(即使删除了'输入代码')。


如何在C中定义数组?

enum { ARRAYSIZE = 23 };
int array[ARRAYSIZE];
int j;

for (j = 0; j < ARRAYSIZE; j++)
    array[j] = 0;

你也可以使用初始化程序,但除非你是彻底的,否则你可能会得到编译器警告:

int array[ARRAYSIZE] = { 0 };

还有一种可能性:如果你想定义一个数组并通过调用特定函数来初始化它,那么我想,你可以尝试:

#define ARRAY(type, name, size, initializer) type name[size]; \
          for (int j = 0; j < size; j++) name[j] = initializer

这可以用作:

ARRAY(int, array, 23, j % 9);

(请注意,这个初始化程序依赖于宏的实现细节 - 不是一个好主意。但我认为我不会使用这样的宏。无论如何,这取决于你是否处于C99模式在特定的代码块中有多个这样的代码(因为它会将代码与声明混合在一起) - 并且因为for循环中的声明仅在C ++和C99中支持,而不是在C90中。

答案 1 :(得分:2)

这看起来真的错了。为什么不以正常方式定义数组?

int array[SIZE];
for (j=0; j<N_frequencysteps;j++)
{  
   array[j] = (function);
}