如果我这样做:
void foo() {
if( .. ) {
inline int baa(..) { return .. }
} else {
inline int baa(..) { return .. }
}
}
在baa(..)
函数内调用:foo
我得到implicit declaration of 'baa'
。
但是如果我做原型声明:inline int baa(int);
错误是inline function 'baa' declared but never defined
。我正在使用内联函数来替换宏函数。
如何解决这个问题?
修改 更好:有人可以解释为什么编译器会声明上述错误消息吗?
答案 0 :(得分:4)
我正在使用内联函数来替换宏函数。
你不能在函数中定义函数,你只能声明它们。声明它们使得它们的名称在该范围内可见,但这些函数仍然需要在某处定义,并且我们知道我们无法在另一个函数中定义它们。这就是编译器说该函数声明但从未定义的原因。
相反,只需在全局范围内声明您的函数inline
。
答案 1 :(得分:1)
虽然它不是标准的一部分,但您可以使用标记-fnested-functions
答案 2 :(得分:1)
K-ballo的建议确实看起来最好,但他实际上没有指出问题。
在块中定义的嵌套函数仅在块内有效。就像一个普通的变量。您可以在if
子句中定义一个函数,在else
子句中定义另一个函数,并且每个函数在该子句中都有效。但if-else
关闭后,两者都无效。
与变量完全相同:
if (a) {
int x = 3;
} else {
int x = 4;
}
// x isn't valid here.