【问题标题】:#Define & lpCmdLine arguments#Define & lpCmdLine 参数
【发布时间】:2013-11-17 16:55:06
【问题描述】:

是否可以从启动参数中定义一个字符串?

例如,我在头文件中有这段代码:

#define MsgBox "Hello there!"

如何使 #define 字符串来自命令行参数?

所以如果我像这样启动我的应用程序:app.exe -Test! - MsgBox 将被定义为“Test!”。

对不起,如果这是一个糟糕的解释,但希望至少你们中的一些人能理解。 从命令行参数获取#define MsgBox 很重要,而不是从程序的入口点获取。所有代码都应该在头文件中。

老实说,我没有尝试过任何东西,因为我不知道从哪里开始。

【问题讨论】:

  • 如果你想从编译器命令行定义一个宏值,那么你应该告诉我们你使用的是哪个编译器。如果您想从 executable command line (!!!) 定义一个宏,那么很抱歉,您不能因为宏仅在编译时解析(好吧,我想这不是您的情况.. .只是说清楚!)

标签: c++ string arguments command-line-arguments c-preprocessor


【解决方案1】:

这是不可能的,因为#define 是一个预处理器命令。也就是说,您可以将其视为发生在编译时 的查找和替换。 (它们可以用于其他用途,但至关重要的是,它是在编译时评估的)。

为什么不直接使用变量呢?这样它也是类型安全的。

更新:使用定义

假设您已将参数存储在某个全局 lpCmdLine

那么你的定义就变成了

#define MsgBox lpCmdLine

【讨论】:

  • 谢谢。我试图以非常奇怪的方式来做这件事,因为 #define MsgBox 在源代码中使用了很多,我想通过 lpCmdLine 将它从静态字符串更改为“可修改”。而且我对源代码不是很熟悉,因为它至少有 15K 行并且是跨平台的,但是感谢您告诉我这是不可能的。会尽可能标记为已回答。 (约 5 分钟)。
  • 好吧,你不需要松开定义,只需将它定义为你存储它的变量(我会更新答案来解释)
  • 在你编辑之前,我会在这里快速发布。你的意思是我会正常使用参数,然后只是将变量存储到一个字符串中,然后 #define 从存储的字符串中获取 MsgBox? 编辑: 是的,就像那样。谢谢。现在就试试。
  • 记住defines只是查找和替换,所以如果你在答案中定义,到处都有MsgBox这个词,在编译时,它将被替换为lpCmdLine(它需要在使用定义的任何地方都可以访问,例如始终包含在标头中的全局,但听起来你无论如何都在这样做)。
  • 是的,我得到了它的工作,我将 lpCmdLine 参数传递给 #define 并且它工作得很好。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-03
  • 1970-01-01
  • 2022-07-22
  • 2019-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多