История изменений
Исправление MOPKOBKA, (текущая версия) :
В С нету адекватных средств для printf без строки форматирования, лучше либо отказаться от этой задумки, либо перейти на C++.
Вот, посмотри как сделан в ядре printk:
https://docs.kernel.org/core-api/printk-formats.html#printk-specifiers
Он повторяет обычный printf по форматированию, но вводит несколько своих элементов для распечатки, например:
https://docs.kernel.org/core-api/printk-formats.html#device-tree-nodes
Предлагаю повторить работающий дизайн, если тебе просто нужно выводить логи. Если ты занимаешься отладкой через printf, то советую изучить gdb, им можно не просто отлаживать, его можно скриптовать, и писать pretty-printerы для своих структур. Сможешь распечатывать из него красиво все что тебе нужно увидеть, в любом формате каком захочешь.
Примеры с gdb для С++ классов, был страшный класс, а вывел как простую строку: https://sourceware.org/gdb/current/onlinedocs/gdb.html/Pretty_002dPrinter-Exa...
Если ты хочешь продолжить мучение, то LINUX-ORG-RU написал хороший ответ. По второму вопросу firkax тоже верно ответил, посмотри на правила преобразования для аргументов определяемых через три точки.
Исправление MOPKOBKA, :
В С нету адекватных средств для printf без строки форматирования, лучше либо отказаться от этой задумки, либо перейти на C++.
Вот, посмотри как сделан в ядре printk:
https://docs.kernel.org/core-api/printk-formats.html#printk-specifiers
Он повторяет обычный printf по форматированию, но вводит несколько своих элементов для распечатки, например:
https://docs.kernel.org/core-api/printk-formats.html#device-tree-nodes
Предлагаю повторить работающий дизайн, если тебе просто нужно выводить логи. Если ты занимаешься отладкой через printf, то советую изучить gdb, им можно не просто отлаживать, его можно скриптовать, и писать pretty-printerы для своих структур. Сможешь распечатывать из него красиво все что тебе нужно увидеть, в любом формате каком захочешь.
Примеры с gdb для С++ классов, был страшный класс, а вывел как простую строку: https://sourceware.org/gdb/current/onlinedocs/gdb.html/Pretty_002dPrinter-Exa...
Если ты хочешь продолжить мучение, то LINUX-ORG-RU написал хороший ответ. По второму вопросу firkax тоже верно ответил, посмотри на правила преобразования для ... аргументов.
Исправление MOPKOBKA, :
В С нету адекватных средств для printf без строки форматирования, лучше либо отказаться от этой задумки, либо перейти на C++.
Вот, посмотри как сделан в ядре printk:
https://docs.kernel.org/core-api/printk-formats.html#printk-specifiers
Он повторяет обычный printf по форматированию, но вводит несколько своих элементов для распечатки, например:
https://docs.kernel.org/core-api/printk-formats.html#device-tree-nodes
Предлагаю повторить работающий дизайн, если тебе просто нужно выводить логи. Если ты занимаешься отладкой через printf, то советую изучить gdb, им можно не просто отлаживать, его можно скриптовать, и писать pretty-printerы для своих структур. Сможешь распечатывать из него красиво все что тебе нужно увидеть, в любом формате каком захочешь.
Примеры с gdb для С++ классов, был страшный класс, а вывел как простую строку: https://sourceware.org/gdb/current/onlinedocs/gdb.html/Pretty_002dPrinter-Exa...
Если ты хочешь продолжить мучение, то LINUX-ORG-RU написал хороший ответ.
Исправление MOPKOBKA, :
В С нету адекватных средств для printf без строки форматирования, лучше либо отказаться от этой задумки, либо перейти на C++.
Вот, посмотри как сделан в ядре printk:
https://docs.kernel.org/core-api/printk-formats.html#printk-specifiers
Он повторяет обычный printf по форматированию, но вводит несколько своих элементов для распечатки, например:
https://docs.kernel.org/core-api/printk-formats.html#device-tree-nodes
Предлагаю повторить работающий дизайн, если тебе просто нужно выводить логи. Если ты занимаешься отладкой через printf, то советую изучить gdb, им можно не просто отлаживать, его можно скриптовать, и писать pretty-printerы для своих структур. Сможешь распечатывать из него красиво все что тебе нужно увидеть, в любом формате каком захочешь.
Примеры с gdb для С++ классов, был страшный класс, а вывел как простую строку: https://sourceware.org/gdb/current/onlinedocs/gdb.html/Pretty_002dPrinter-Exa...
Если ты хочешь продолжить мучение, то во втором случае нужен _Generic на PRINT, который будет засылать в va_arg поля x y из структуры, вместо самой структуры.
Исправление MOPKOBKA, :
В С нету адекватных средств для printf без строки форматирования, лучше либо отказаться от этой задумки, либо перейти на C++.
Вот, посмотри как сделан в ядре printk:
https://docs.kernel.org/core-api/printk-formats.html#printk-specifiers
Он повторяет обычный printf по форматированию, но вводит несколько своих элементов для распечатки, например:
https://docs.kernel.org/core-api/printk-formats.html#device-tree-nodes
Предлагаю повторить работающий дизайн, если тебе просто нужно выводить логи. Если ты занимаешься отладкой через printf, то советую изучить gdb, им можно не просто отлаживать, его можно скриптовать, и писать pretty-printerы для своих структур. Сможешь распечатывать из него красиво все что тебе нужно увидеть, в любом формате каком захочешь.
Примеры с gdb для С++ классов, был страшный класс, а вывел как простую строку: https://sourceware.org/gdb/current/onlinedocs/gdb.html/Pretty_002dPrinter-Exa...
Исправление MOPKOBKA, :
В С нету адекватных средств для printf без строки форматирования, лучше либо отказаться от этой задумки, либо перейти на C++.
Вот, посмотри как сделан в ядре printk:
https://docs.kernel.org/core-api/printk-formats.html#printk-specifiers
Он повторяет обычный printf по форматированию, но вводит несколько своих элементов для распечатки, например:
https://docs.kernel.org/core-api/printk-formats.html#device-tree-nodes
Предлагаю повторить работающий дизайн, если тебе просто нужно выводить логи. Если ты занимаешься отладкой через printf, то советую изучить gdb, им можно не просто отлаживать, его можно скриптовать, и писать pretty-printerы для своих структур. Сможешь распечатывать из него красиво все что тебе нужно увидеть, в любом формате каком захочешь.
Исходная версия MOPKOBKA, :
В С нету адекватных средств для printf без строки форматирования, лучше либо отказаться от этой задумки, либо перейти на C++.
Вот, посмотри как сделан в ядре printk:
https://docs.kernel.org/core-api/printk-formats.html#printk-specifiers
Он повторяет обычный printf по форматированию, но вводит несколько своих элементов для распечатки, например:
https://docs.kernel.org/core-api/printk-formats.html#device-tree-nodes