写入函数内联(非内联函数)C / C ++

时间:2016-08-29 15:30:24

标签: c++ c function inline

我想知道我是否可以编写类似函数内联的东西,或者更像是带有return语句的块。这是我所想的一个例子:

int main(int argc, char* argv[])
{
    printf("result is '%s'\n", 
        {
            char buffer[100];
            //Do some code here to determine string
            return buffer;
        }
    )

    return 0;
}

3 个答案:

答案 0 :(得分:2)

标准C解决方案是编写程序性而非“功能性”代码:

int main(int argc, char* argv[])
{
    char buffer[100];
    {
       // some code, note that variables here go out of scope at the next }
    }
    printf("result is '%s'\n", buffer);
    return 0;
}

您可以使用{ /* ... */ }来引入嵌套作用域,甚至是函数内部。

请注意,您显示的代码 - 即使有像lambdas这样的东西 - 会导致未定义的行为,因为您正在返回一个指向不再存在的数组的指针(它已超出范围)。

如果// some code ...很多,那么您将其放入一个单独的函数中,并将其标记为static,以便它不会从翻译单元中导出。

答案 1 :(得分:1)

您所看到的是lambda function

注意 C ++ 11 以来已经引入了lambda函数,所以你应该有一个兼容的编译器(现在几乎所有的编译器都支持它们)。

这只是一个小例子:

#include <string>
#include <iostream>

int main(int argc, char* argv[]) {
  // Define a closure - note use 'auto' in order to auto-determine the type.
  auto my_lambda = []() -> std::string {
    return std::string("This is a string");
  };

  std::cout << "Result: " << my_lambda() << std::endl;

  return 0;
}

补充说明:这是C ++。 C没有那种东西。

答案 2 :(得分:0)

GCC支持嵌套函数作为扩展,但它可移植/标准。

或者你可以使用lambda。