#include #define INSTANTIATE_FUNC(callee, name) int name(int argc, char **argv) \ { \ printf("%s: argc=%d, call %s\n", #name, argc, #callee); \ return callee(argc, argv); \ } int func1(int argc, char **argv) { printf("%s: argc=%d\n", "func1", argc); return 0; } INSTANTIATE_FUNC(func1, func2) INSTANTIATE_FUNC(func2, func3) INSTANTIATE_FUNC(func3, func4) INSTANTIATE_FUNC(func4, func5) INSTANTIATE_FUNC(func5, func6) INSTANTIATE_FUNC(func6, func7) INSTANTIATE_FUNC(func7, func8) INSTANTIATE_FUNC(func8, func9) INSTANTIATE_FUNC(func9, func10) INSTANTIATE_FUNC(func10, func11) INSTANTIATE_FUNC(func11, func12) INSTANTIATE_FUNC(func12, func13) INSTANTIATE_FUNC(func13, func14) INSTANTIATE_FUNC(func14, func15) INSTANTIATE_FUNC(func15, func16) INSTANTIATE_FUNC(func16, func17) INSTANTIATE_FUNC(func17, main)