是否可以使用嵌套函数/块编写可移植C代码? 我知道gcc只支持嵌套函数作为非标准扩展,而clang只支持块 – 但是有没有办法编写可以使用标准C和MACROS进行编译的代码? 如果不可能 – 最好的工作是什么? 举个例子,如何实现一个带参数的以下类型的可移植版本? 海湾合作委员会的简单例子: int main(int argc, char*[] argv) { char reverse = 0; int cmp_func(const void *a, const void *b) { const int* aa = (const int)a; const int* bb = (const int)b; return (reverse) ? aa – bb : bb – aa; } int list[8] = {1,2,3,4,5,20,100,200}; qsort(list, […]
在C中,以下代码可以考虑我总是使用gcc。 int foo( int foo_var ) { /*code*/ int bar( int bar_var ) { /*code*/ return bar_var; } return bar(foo_var); } 如何在gcc编译器上实现C ++中嵌套函数的相同function? 不介意这看起来像是一个初学者的问题。 我是这个网站的新手。
我最近发现gcc允许定义嵌套函数。 在我看来,这是一个很酷的function,但我想知道如何实现它。 虽然通过将上下文指针作为隐藏参数传递来实现嵌套函数的直接调用当然不难,但gcc还允许获取指向嵌套函数的指针并将此指针传递给任意其他函数,而该函数又可以调用嵌套函数上下文的function。 因为调用嵌套函数的函数只有要调用的嵌套函数的类型,所以它显然不能传递上下文指针。 我知道,其他语言如Haskell有一个更复杂的调用约定允许部分应用程序支持这些东西,但我认为没有办法在C中这样做。如何实现这一点? 以下是一个说明问题的案例的小例子: int foo(int x,int(*f)(int,int(*)(void))) { int counter = 0; int g(void) { return counter++; } return f(x,g); } 此函数调用一个函数,该函数调用一个函数,该函数从上下文返回一个计数器并同时递增它。
我知道嵌套函数不是标准C的一部分,但由于它们存在于gcc中(并且事实上gcc是我唯一关心的编译器),我倾向于经常使用它们。 这是坏事吗 ? 如果是这样,你能告诉我一些令人讨厌的例子吗? gcc中嵌套函数的状态是什么? 他们会被删除吗?