C++ 从函数c+返回宏+;

C++ 从函数c+返回宏+;,c++,macros,C++,Macros,我在程序的顶部有几个define语句 #定义foo-bar #定义三个3 等等 我的问题是,如果我有一个函数 #定义foo-bar 字符串returnDef(){ 返回foo; } int main(){ 字符串foobar=returnDef(); 返回0; } 我将返回消息foo,还是返回foo,bar?foo即使在编译源代码之前,源代码中的实例也将替换为bar实例。这就是所谓的预处理,它在编译器之前就开始了。编译器不会看到像returnfoo这样的语句,而是会看到returnbar 因

我在程序的顶部有几个define语句

#定义foo-bar
#定义三个3
等等

我的问题是,如果我有一个函数

#定义foo-bar
字符串returnDef(){
返回foo;
}
int main(){
字符串foobar=returnDef();
返回0;
}

我将返回消息
foo
,还是返回
foo
bar

foo
即使在编译源代码之前,源代码中的实例也将替换为
bar
实例。这就是所谓的预处理,它在编译器之前就开始了。编译器不会看到像
returnfoo
这样的语句,而是会看到
returnbar


因此,您将从此实例中的函数返回
bar
(让
bar
成为您在其他地方定义的内容)。即使在编译源代码之前,源代码中的
foo
实例也将替换为
bar
实例。这就是所谓的预处理,它在编译器之前就开始了。编译器不会看到像
returnfoo
这样的语句,而是会看到
returnbar


因此,您将从本例中的函数返回
bar
(让
bar
成为您在别处定义的内容)。

宏只是文本替换
foo
将被
bar
替换。这意味着什么取决于如何声明
bar
,而您没有显示。请试着做一个完整的例子。同样作为一般提示:尽可能避免使用宏。你也可以(尝试)编译它,看看会发生什么@胡桃木是的,我听说宏是可以避免的,但是,在这个特定的用例中,它们已经成为必要的。我对此表示怀疑:
constexpr int three=3可能与第一个宏类似(但缺少
bar
definition)。宏只是文本替换
foo
将被
bar
替换。这意味着什么取决于如何声明
bar
,而您没有显示。请试着做一个完整的例子。同样作为一般提示:尽可能避免使用宏。你也可以(尝试)编译它,看看会发生什么@胡桃木是的,我听说宏是可以避免的,但是,在这个特定的用例中,它们已经成为必要的。我对此表示怀疑:
constexpr int three=3可能与第一个宏类似(但缺少
bar
定义)。