Predefined macros в компиляторе IAR

Во многих компиляторах C есть такая штука как predefined macros — предзаданные (встроенные) макросы.

Как и обычные макросы, их раскрывает препроцессор на самом первом этапе сборки кода. Поэтому эти макросы рассматриваются именно с позиции конкретного файла исходного кода, и конкретной текущей строки.

Среди них макросы даты и времени:

  • __DATE__ — текущая дата в формате «May 20 2015″. Дни меньше 10 числа месяца будут дополнены пробелом слева.
  • __TIME__ — текущее время в формате «13:20″. В IAR это только часы и минуты, а в GCC добавлены секунды.

Дата и время, конечно же, текущие на момент трансляции файла.

И макросы, указывающие на файл и строку в нём:

  • __MODULE__ — короткое имя текущего файла, типа того как указывается в директиве #include.
  • __FILE__ — полный путь к текущему файлу. Не короткое имя, как в __MODULE__, а именно полный путь.
  • __LINE__ — номер строки, вместо этого макроса подставляется номер строки в которой он находится, в виде десятичного числа. Необычный макрос, который изменяется (инкрементируется) с каждой новой строкой.

Макросы __FILE__ и __LINE__ очень удобны для отладки, поскольку вы можете выводить отладочные сообщения или сообщения об ошибках сразу с прямым указанием на положение ошибочного места в коде. Это может выглядеть, например, так:

printf("Serious error occurred in file %s, line %d\n", __FILE__, __LINE__);

Я думаю, что их можно сразу добавить в функцию DEBUG_PRINTF для Syslog — можно будет в веб-интерфейсе логгера видеть файл и строку для каждого сообщения.

Также есть (менее применимые) макросы, указывающие на архитектуру и модель процессора, для которого ведётся сборка. Это:

  • __TARGET_ARCH_xx и
  • __TARGET_CPU_xx

Это самые полезные предопределённые макросы, а об остальных макросах вы можете прочитать на сайте ARM.

Ссылка на основную публикацию