C 头文件中的外部定义常量

Externally defined constant in C header file

我有一个在包含二维数组(泳道)的头文件中定义的结构。 我想在编译时定义数组的大小,例如通过设置环境变量。

#ifndef GAMEBOARD_H
#define GAMEBOARD_H

struct gameboard
{
    int lanes[4][4];
    int isWonBy;
    int isFinished;
    int nextPlayer;
};

struct gameboard *put(struct gameboard *board, int laneIndex);

#endif

我想在运行时在此结构的所有实例之间保持数组大小不变,但在编译时定义该大小,而不必每次都更改源代码。数组的高度和宽度应该是分开的,并且有默认值。

#ifndef LANES_DIMENSION
#error "You must define LANES_DIMENSION at compile time!"
#endif

struct gameboard
{
    int lanes[LANES_DIMENSION][LANES_DIMENSION];
    int isWonBy;
    int isFinished;
    int nextPlayer;
};

GCC:

gcc -DLANES_DIMENSION=10 source.c

MSVC:

cl /DLANES_DIMENSION=10 source.c

另一种方法是只为这个值创建一个小 array_size.h 文件。 #include 它在 gameboard.h 中并在编译时重新生成它,例如批处理文件如:

@echo #define ARRAY_SIZE %ENV_DEF% >array_size.h