tags:

views:

937

answers:

2

I have in a function that takes a struct, and I'm trying to store its variables in an array, but I get this when I run gcc -Wall -ansi -pedantic-errors -Werror

int detect_prm(Param prm) {
  int prm_arr[] = {prm.field1, prm.field2, prm.field3};

  return 0;
}

I get Error: initializer element is not computable at load time when I try to compile the above. It looks fine to me, whats wrong?

+3  A: 

This is illegal in C. Initializer lists must be constant compile time expressions. Do the following instead:

int prm_arr[3];

prm_arr[0] = prm.field1;
prm_arr[1] = prm.field2;
prm_arr[2] = prm.field3;
Mike Thompson
Illegal in C89 which is the standard implied by -ansi; legal in C99, which can be enabled by using -std=c99 instead of -ansi.
Jonathan Leffler
+3  A: 

Mike's answer is absolutely right.

However, if you're able to use the GNU C extensions, or to use the newer and better C99 standard instead (use the --std=c99 option), then initializers such as this are perfectly legal. The C99 standard has been out for, well, 9 years, and most C compilers support it quite well... especially this feature.

Dan