Я пытаюсь понять, как работает программа hello world:
#include <stdio.h>
int main(int argc, char **argv) {
printf("Hello World!");
return 0;
}
По большей части это просто, за исключением части printf
. Я не знаю, как это работает. Чтобы понять это, я поискал перекрестная ссылка glibc и нашел эту страницу.
Затем я поискал printf
и получил много результатов.
Какой из этих printf
s моя программа использует? Как я могу это определить?
Кроме того, например, при открытии первого результата на этой странице, функция в функции printf
приводит меня к __printf_chk, где функция в __printf_chk
приводит меня к __nldbl___vfprintf_chk, где функция в __nldbl___vfprintf_chk
приводит меня к __ vfprintf_chk, где функция в __vfprintf_chk
снова приводит меня к __ nldbl___vfprintf_chk, что создает бесконечную рекурсию. В чем дело?
Короче говоря, как я должен отслеживать источник данной функции / исходного кода?
__printf
, вам придется продираться через большое количество макросов препроцессора и объявлений атрибутов, специфичных для GCC. - person   schedule 18.11.2015__nldbl
функции кажутся связанными с системами которые имеютlong double
). Чтобы это решение оставалось поддерживаемым, существует некоторый уровень макросов и функций-оберток. Со временем этот слой разросся и превратился в бремя обслуживания. (К сожалению, такие сценарии довольно распространены в разработке программного обеспечения.) - person   schedule 18.11.2015