Initialize Static Array of Structs in C Initialize Static Array of Structs in C arrays arrays

Initialize Static Array of Structs in C


Your approach is exactly right.

  1. This will work, and is a good way to avoid huge switch statements.
  2. You can't define functions inline in C, they each must have a unique name.
  3. extern is what you want, not static. Change your body to be this:

    struct CARD cardDefinitions[] = {     {0, 1, do_card0},     {1, 3, do_card1} }; 

    then in an appropriate header file:

    extern struct CARD cardDefinitions[];


Your approach is right and will work. Your function pointer syntax is right, except that you don't use parameter names - just types:

int (*do_actions)(struct GAME_STATE *, int, int);


  1. That should work fine. It seems like you'd have a lot of functions if you're doing one per card, but maybe this particular game requires that level of control

  2. You can't define them inline, but you can just do a forward declaration. You need to do &func_name in the struct initialization though

  3. No; extern means a variable is declared in another file, so it doesn't make sense to have an extern variable that you're declaring at that location. Also, static means the variable is only accessible from the current file, which is the opposite of what you want. Making it read-only would require a getter function, but if you just want to make it accessible from another file declare it normally here (struct cardDefinitions[] = {...}) and in the other file use an extern (extern struct cardDefinitions[];)