2013-10-27 3 views
-2

Я читаю драйверы устройств 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__ устанавливаются для каждого файла.

ответ

7

__FILE__ и __LINE__ являются макросами препроцессора C, это не зависит от ядра.

+0

Есть также макросы препроцессора C++ (не строго C). –

+0

Да, но контекст вопроса - C, поскольку ядро ​​Linux написано на C. – piokuc

Смежные вопросы