在cpp中是否可以将一个输入值作为宏?

问题描述 投票:-1回答:1

在C++中,是否可以将用户的输入值实时声明为宏?

c++ input macros global
1个回答
0
投票

不,你不能这样做。宏在预处理器处理之后,也就是在代码编译之前就不存在了。另外,在C++中,你应该限制你对宏的使用。在现代的C++中,有更好的类型安全方法 c++ 取决于您的使用案例。


0
投票

不,宏会被预处理到你的代码中。

宏会被预处理到你的代码中,就像在你使用的地方复制和粘贴宏定义一样。这是您的编译器所做的第一步。一旦你的程序被预处理,编译和链接就会随之而来。

如果你有这样的东西。

#define WIDTH 1920
#define HEIGHT 1080

Window window(WIDTH, HEIGHT);
...
int windowWidth = WIDTH;
int windowHeight = HEIGHT;

它会被处理成这样

Window window(1920, 1080);
...
int windowWidth = 1920;
int windowHeight = 1080;
...

0
投票

这将是一个有趣的实验

  1. 程序员写的代码将在运行时定义一个宏。
  2. 预处理器处理(除其他外)代码中所有的宏。
  3. 编译器和链接器联合起来,将预处理后的(无宏)代码转换为可执行文件。
  4. 这个(不含源代码的)可执行文件被启动(也许是在不同的计算机上!)。
  5. 可执行文件从用户那里接收一个宏定义。
  6. 可执行文件打开一个时间窗口,将宏送回步骤2,这时它就可以被处理了。
  7. 在改变的历史中,新的宏导致编译失败;步骤3中没有创建可执行文件。
  8. 由于没有可执行文件可以运行,步骤4-6永远不会发生,从而导致了时间悖论(TIME PARADOX)!当时空连续体撕裂的时候,新的宏导致编译失败;步骤3中没有可执行文件被创建。
  9. 当时空连续体被撕碎的时候,C++标准委员会召开了一次紧急会议,以确保 "时间旅行 "被干净利落地归入 "未定义行为 "的范畴。

:)

© www.soinside.com 2019 - 2024. All rights reserved.