gcc поддерживает Pascal-подобное расширение C, а именно вложенные функции, например,
#include <stdio.h>
int main(void)
{
int a = 1, b = 2;
void foo(void)
{
printf("%s: a = %d, b = %d\n", __FUNCTION__, a, b);
}
printf("%s: a = %d, b = %d\n", __FUNCTION__, a, b);
foo();
return 0;
}
Скомпилируйте это с помощью --nested-functions:
$ gcc -Wall --nested-functions nested.c -o nested
и затем запустите
$./nested
main: a = 1, b = 2
foo: a = 1, b = 2
Конечно, это непереносимо, но если вы используете только gcc и у вас слишком много устаревшего кода для перезаписи, это может быть хорошим решением.