所以我正在创建一个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
我的示例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++;
}
所以基本上,我需要一种方法来在程序编译之前通过一些命令或一些可以传递给make的配置来改变M_SIZE。
EDIT1:
这个问题是独一无二的,因为我需要一种方法,不仅要传递一个可配置的宏值,而且要处理这个值不作为命令传入的情况,而是使用默认的宏值。
答案 0 :(得分:3)
如果您确定要在编译时设置固定大小,请修改要使用的标头:
#ifndef M_SIZE
#define M_SIZE 50000
#endif
然后您可以在编译器命令行上覆盖宏:
cc … -DM_SIZE=100000 …
保留默认值,这样如果省略编译器选项,代码仍然可以合理编译。你可以决定你想要编译失败,但这通常不是一个好的选择。
答案 1 :(得分:1)
删除decode(genericType.self
并将值传递给编译器的命令行,如#define
。或者更好的是,通过gcc -DM_SIZE=1000
分配并将大小作为命令行参数传递,并通过malloc
检索它,这将允许更改大小而无需重新编译。