C++ 从函数c+返回宏+;
我在程序的顶部有几个define语句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 因
#定义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
定义)。