c - 在 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 的值执行。
解决方案
宏在编译之前处理,更不用说运行时了。因此,不可能动态定义宏。
最接近的方法是创建一个全局变量并通过指针对其进行修改。
但是,最好只使用具有默认值的局部变量。
int NUMBER_OF_VALUES = 256;
if (strcmp(argv[1], "128")) {
NUMBER_OF_VALUES = 128
}
如果您打算在运行时使用 NUMBER_OF_VALUES 来分配特定大小的堆栈数组,那根本不可能。你需要调用malloc。
推荐阅读
- css - id 名称为 id-Output Url 的输入无法选择
- node.js - 在nodejs上构建代码时JavaScript堆内存不足
- node.js - 如何使用 Express 和 Apollo-Server 获取 HTTP 授权标头
- java - 如何在android studio上修复“模拟器:进程以退出代码-2147483645完成”?
- apache-flink - Flink re-scalable keyed stream 有状态函数
- laravel - 如何使用已登录的用户 ID 插入数据?Laravel-6
- html - mjml 可点击按钮,不仅仅是按钮内的文字
- itext - iTextSharp 出现空引用异常的问题
- r - Tidyeval 评估 case_when
- xml - Powershell:如何抑制 Select-Xml 的输出?