Я читаю драйверы устройств Linux и замечаю, что вы можете распечатать текущую строку и файл, используя, например, printk. Как это реализовано? Как Linux отслеживает строку, содержащую инструкцию printk? Я не видел подобных возможностей в «нормальном C-коде», написанном в пользовательском пространстве.Как расширяются __FILE__ и __LINE__ в коде ядра?
Вот пример из LDD3:
printk(KERN_DEBUG "Here I am: %s:%i\n", __FILE__, __LINE__);
EDIT: Как ответил piokuc, это на самом деле стандартные макросы. Документы НКИ описать их здесь: http://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html
__LINE__
устанавливаются для каждой строки и заменяются текущей строкой препроцессора, __FILE__
устанавливаются для каждого файла.
Есть также макросы препроцессора C++ (не строго C). –
Да, но контекст вопроса - C, поскольку ядро Linux написано на C. – piokuc