函数内部的函数

时间:2012-06-14 03:16:35

标签: c macros inline

如果我这样做:

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。我正在使用内联函数来替换宏函数。

如何解决这个问题?

修改 更好:有人可以解释为什么编译器会声明上述错误消息吗?

3 个答案:

答案 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.