C++ #定义&;lpCmdLine参数

C++ #定义&;lpCmdLine参数,c++,string,arguments,command-line-arguments,c-preprocessor,C++,String,Arguments,Command Line Arguments,C Preprocessor,可以从启动参数定义字符串吗 例如,我在头文件中有以下代码: #define MsgBox "Hello there!" 如何使#define字符串来自命令行参数 所以如果我像这样启动我的应用程序:app.exe-TestMsgBox将被定义为“Test!” 对不起,如果这是一个糟糕的解释,但希望至少你们中的一些人理解。 从命令行参数而不是程序入口点获取#define MsgBox非常重要。所有代码都应该在头文件中 老实说,我什么都没试过,因为我不知道从哪里开始 这是不可能的,因为#define

可以从启动参数定义字符串吗

例如,我在头文件中有以下代码:

#define MsgBox "Hello there!"
如何使#define字符串来自命令行参数

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

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


老实说,我什么都没试过,因为我不知道从哪里开始

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

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

更新:使用define

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

然后你的定义就变成了

#define MsgBox lpCmdLine

如果您想从编译器命令行定义宏值,那么您应该告诉我们您使用的编译器。如果您想从可执行命令行(!!!)定义宏,那么很抱歉您不能,因为宏只能在编译时解析(好的,我想这不是您的情况……只是为了澄清!),谢谢。我尝试了一种非常奇怪的方式,因为#define-MsgBox在源代码中使用了很多,我想通过lpCmdLine将其从静态字符串更改为“modifiable”。我对源代码不是很熟悉,因为它至少有15K条线路,而且是跨平台的,但是谢谢你告诉我这是不可能的。当我能回答时,我会记下答案。(~5min)。您不需要松开定义,只需将其定义为存储在其中的变量(我将更新答案以进行解释),在编辑之前,我将在这里快速发布。你的意思是我会正常使用参数,但只是将变量存储到字符串中,然后#从存储的字符串定义MsgBox?编辑:是的,就像那样。谢谢请记住,
define
s只是查找和替换,因此如果您在答案中定义为,则在编译时,只要有
MsgBox
这个词,它就会被替换为
lpCmdLine
(需要在使用define的任何地方都可以访问它,例如始终包含在标题中的全局文件,但听起来好像您正在这样做)。是的,我让它工作了,我将lpCmdLine参数传递给了#define,它工作得很好。:)