но получил только
Ты слишком легко сдаешься. Посмотрите на sysdeps/unix/sysv/linux/powerpc/libc-start.c
, и вы увидите, что оно #include <csu/libc-start.c>
после определения LIBC_START_MAIN
, а csu/libc-start.c
имеет :
STATIC int
LIBC_START_MAIN (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL),
int argc, char **argv,
#ifdef LIBC_START_MAIN_AUXVEC_ARG
ElfW(auxv_t) *auxvec,
#endif
__typeof (main) init,
void (*fini) (void),
void (*rtld_fini) (void), void *stack_end)
{ ...
Обновление:
Я не очень хорошо знаю, как работает макрос #define.
#define
создает текстовое замещение для препроцессора. Например:
#define FOO Bar
говорит препроцессору: каждый раз, когда вы видите FOO
, заменяйте его на Bar
(есть некоторые подробности, которые я здесь рассматриваю, но они не важны для этого вопроса).
Итак, учитывая:
#define LIBC_START_MAIN generic_start_main
int LIBC_START_MAIN() { ... }
Вот что компилятор видит после предварительной обработки:
int generic_start_main() { ... }