以下语法是否在C中定义数组有效语法?
#define array[] { \
for (j=0; j<N_frequencysteps;j++) \
{ \
array[j] = (function); \
} \
}
如果没有,我如何在C中定义数组?
答案 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);
}