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...

Если ты хочешь продолжить мучение, то 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