首页 > 解决方案 > 在 c 中动态更改定义宏

问题描述

我不确定我的问题是否有意义,但我正在尝试编写一个程序,如果程序中使用了特定标志,则该程序会更改定义宏的值。

默认情况下,定义值设置为 256,如果用户输入,./program_name value我希望该值是新的定义宏。这是下面的c代码。

在文件顶部定义的宏:

#define NUMBER_OF_VALUES 256

主函数内部:

if (strcmp(argv[1], "256")) {
    #ifdef NUMBER_OF_VALUES
    #undef NUMBER_OF_VALUES
    #define NUMBER_OF_VALUES 128
    #endif
}
else if (strcmp(argv[1], "128")) {
    // do nothing
}

这段代码是如何工作的,或者我发现它是如何工作的,如果输入的值是 256,它什么都不做,而当值是 128 时,它会尝试取消定义宏并用新值(即 128)再次定义它。

但是,这不起作用,当使用 128 的值时,默认情况下它仍然使用 256 的值执行。

标签: c

解决方案


宏在编译之前处理,更不用说运行时了。因此,不可能动态定义宏。

最接近的方法是创建一个全局变量并通过指针对其进行修改。

但是,最好只使用具有默认值的局部变量。

int NUMBER_OF_VALUES = 256;
if (strcmp(argv[1], "128")) {
   NUMBER_OF_VALUES = 128
}

如果您打算在运行时使用 NUMBER_OF_VALUES 来分配特定大小的堆栈数组,那根本不可能。你需要调用malloc。


推荐阅读