Как найти исходный код для printf в C? - PullRequest
0 голосов
/ 19 января 2020

Мне любопытно узнать, что находится внутри функции printf.

Есть ли какая-либо команда в терминале или cmd для получения исходного кода для этой функции?

Ответы [ 4 ]

1 голос
/ 19 января 2020

Это примерно то, что в нем содержится:

#include <stdarg.h>

void minprintf(char *fmt,...)
{
    va_list ap: 
    char *p, *sval;
    int ival;
    double dval;

    va_start(ap, fmt);
    for(p = fmt; *p; p++) {
        if(*p != '%') {
            putchar(*p);
            continue;
        }
        switch (*++p) {
            case 'd':
                ival = va_arg(ap, int);
                printf("%d", ival );
                break;
            case 'f':
                dval  = va_arg(ap, double);
                printf("%f", dval);
                break;
            case 's':
                for(sval = va_arg(ap, char *); *sval; sval++)
                    putchar(*sval);
                break;
            default:
                putchar(*p);
                break;
        }
    }
    va_end(ap); 
}

Пример взят из книги "C язык". Книга написана Брайаном Керниганом и Деннисом Ритчем ie. Там вы найдете подробное объяснение языка C и других стандартных функций.

1 голос
/ 19 января 2020

Точный исходный код для стандартных функций библиотеки будет варьироваться в зависимости от реализации, то есть источник для семейства *printf будет отличаться для g cc, LLVM, компилятора Visual Studio и т. Д. c. Не каждая реализация делает свой исходный код доступным.

Сказав это, исходный код библиотеки GNU C (glib c) можно найти здесь . Опять же, это только одна из множества разных реализаций.

1 голос
/ 19 января 2020

Это называется обратным инжинирингом, и вы можете использовать для этого такие инструменты, как IDA и Ghidra.

Еще одна вещь, которую вы можете сделать, - поискать в inte rnet версию с открытым исходным кодом. реализации функции, например, от Linux, например здесь .

0 голосов
/ 19 января 2020

Вы можете просто щелкнуть правой кнопкой мыши на printf и увидеть полный код, описывающий его.

    _Check_return_opt_
_CRT_STDIO_INLINE int __CRTDECL printf(
    _In_z_ _Printf_format_string_ char const* const _Format,
    ...)
#if defined _NO_CRT_STDIO_INLINE
;
#else
{
    int _Result;
    va_list _ArgList;
    __crt_va_start(_ArgList, _Format);
    _Result = _vfprintf_l(stdout, _Format, NULL, _ArgList);
    __crt_va_end(_ArgList);
    return _Result;
}
#endif

Вот как вы делаете это в visual studio: printf

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...