所以我正在制作一个 C 程序,它从数组中获取内存static unsigned char[M_SIZE],其中M_SIZE是宏。我需要做的是能够通过 make 中的命令更改该宏的值,以便有人可以根据传递给 make 的参数使用不同大小的保留内存来编译程序。
我的头文件示例是 DataStore.h
#ifndef DATA_STORE_H
#define DATA_STORE_H
#define M_SIZE 50000 // Need this to be configurable via make arguments
unsigned char* DataStore_get_buf(void);
unsigned char* DataStore_get_end(void);
void DataStore_inc_ptr(void);
#endif
Run Code Online (Sandbox Code Playgroud)
我的示例 C 文件是 DataStore.c
#include "DataStore.h"
static unsigned char DataStore_BUFFER[M_SIZE];
static unsigned char* DataStore_PTR = DataStore_BUFFER;
unsigned char* DataStore_get_buf(void)
{
return DataStore_BUFFER;
}
unsigned char* DataStore_get_end(void)
{
return DataStore_BUFFER + M_SIZE;
}
void DataStore_inc_ptr(void)
{
DataStore_PTR++;
}
Run Code Online (Sandbox Code Playgroud)
所以基本上,我需要一种在程序编译之前通过某些命令或可以传递到 make 的配置来更改 M_SIZE 的方法。
编辑1:
这个问题很独特,因为我需要一种方法,不仅要传入可配置的宏值,还要处理该值不作为命令传入的情况,而是使用默认宏值。
如果您确定要在编译时设置固定大小,请修改标头以使用:
\n\n#ifndef M_SIZE\n#define M_SIZE 50000\n#endif\nRun Code Online (Sandbox Code Playgroud)\n\n然后您可以在编译器命令行上覆盖该宏:
\n\ncc \xe2\x80\xa6 -DM_SIZE=100000 \xe2\x80\xa6\nRun Code Online (Sandbox Code Playgroud)\n\n保留默认值,以便如果省略编译器选项,代码仍然可以合理编译。您也可以决定希望编译失败,但这通常不是一个好的选择。
\n