Предложения по изучению макросов в C - PullRequest
5 голосов
/ 19 апреля 2011

Я прошел курс подготовки студентов по языкам программирования, который охватывал C. Однако, не смотря на то, что я начал работать в компании по встроенным системам, я вижу множество макросов, которые регулярно используются в C.

Пожалуйста, поделитесь ссылками, где я могу узнать больше о макросах.

У меня есть K & R 2nd Ed, но я думаю, что их стиль слишком лаконичен. Что-то с большим количеством примеров было бы лучше для меня.

Ответы [ 6 ]

5 голосов
/ 19 апреля 2011

Честно говоря, в наши дни вы должны ограничивать использование макросов очень простыми определениями.

Другими словами, не тратьте свое время на создание сложных функций с помощью макросов.

Они имеют тенденциюв прошлом было три основных применения:

  • простые определения для прекомпилятора, такие как #define USE_DEBUG и #ifdef USE_DEBUG.По большому счету, они все еще очень ценны в переносимом коде.

  • быстрые «встроенные» функции, такие как #define SQR(x) ((x) * (x)), которые теперь гораздо больше подходят для реальных встроенных функций.Макро версия имеет ряд проблем, одна из которых состоит в том, что i = 7; j = SQR(i++); будет , а не обязательно сделает то, что вы ожидаете.

  • перечисления препроцессора, такие как #define OKAY 0, #define ERR_NOMEM 1 и т. Д. - это лучше сделать в виде реальных перечислений - поскольку версии макросов являются базовыми заменами, вы, как правило, не получаете символы при отладочной информации.

3 голосов
/ 19 апреля 2011

Вот учебник из двух частей по препроцессору C под названием " Советы и рекомендации по использованию препроцессора "от IAR Systems:

2 голосов
/ 19 апреля 2011

Может показаться слишком очевидным, но статья вики о препроцессоре C на самом деле довольно хорошая и подробная:

http://en.wikipedia.org/wiki/C_preprocessor

2 голосов
/ 19 апреля 2011

Вы можете проверить следующие ссылки:

Большинство трюков вам придётся поднять самостоятельно. Возможно, если вы сможете опубликовать некоторые макросы, которые вы не понимаете, мы поможем вам с ними.

0 голосов
/ 19 апреля 2011
Hello,
As far as my knowledge goes the use of macro defs in embedded systems should 

быть довольно скудным.То есть вы должны использовать их только для: константных определений (в коде не должно быть магического числа), простых встроенных функций (например, тех, которые возвращают значение типа bool), и это в значительной степени так.Помните, что хотя встроенные функции экономят некоторые процессорные циклы, они компенсируют вздутие кода и предотвращают отладку указанных функций.Надеюсь, это поможет и ответит на ваш вопрос.

0 голосов
/ 19 апреля 2011

Использовать макрос довольно просто:

#define MACRO_FUNCTION(par1, par2) (par1 * par2)
int product = MACRO_FUNCTION(4 ,5);

это пример, где MACRO_FUNCTION рассчитывает продукт.Обратите внимание, что макросы не проверяются типом.Они просто подставляются во время компиляции.Так что вам решать использовать правильные типы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...