我想知道我是否可以编写类似函数内联的东西,或者更像是带有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;
}
答案 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。