Полезность директив препроцессора

Я изучал некоторые сложные темы в C и наткнулся на оператор ##, и приведенный пример был примерно таким.

#define GLUE_HELPER(x, y) x##y
#define GLUE(x, y) GLUE_HELPER(x, y)
#define AVERAGE(x) \
(((GLUE(Max,x)) - (GLUE(Min,x))) / (GLUE(x,Count)))

Я все еще новичок в программировании на C, поэтому, когда я вижу такие макросы, они выглядят почти "волшебными". Макросы обычно становятся более сложными, чем это? Или обычно это 1-2 строки кода?

Мне было интересно, насколько они распространены в кодовых базах производственного уровня? Я видел, как они использовались в некоторых небольших проектах после небольшого исследования, но мне было интересно, есть ли у кого-нибудь еще опыт их более широкого использования.

checkout boost.org и вы увидите чрезвычайно сложные макросы C

phuclv 18.01.2023 18:29
Я сделал первую неделю прошлогоднего появления кода в препроцессоре, если вас интересуют более сложные варианты использования.
camel-cdr 19.01.2023 09:37
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
74
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Макросы обычно становятся более сложными, чем это? Или обычно это 1-2 строки кода?

Макросы, безусловно, могут быть более сложными, и иногда они так и делают. Однако мне не ясно, насколько распространено использование оператора ##. Макросы, подобные объектам, редко бывают длиннее одной или двух строк, но макросы, подобные функциям (те, которые принимают аргументы), часто длиннее.

Мне было интересно, насколько они распространены в кодовых базах производственного уровня?

Очень трудно сказать. Детали использования макросов зависят от истории проекта, соглашений и принципов стиля. И мнения о макросах и их правильном использовании со временем изменились. Никто не может по-настоящему изучить весь корпус C-кода повсюду.

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

[Мне] было интересно, есть ли у кого-нибудь еще опыт их более широкого использования.

Конечно, у многих так. Но общепринятое мнение в наши дни состоит в том, что обычно вы должны предпочесть функцию функционально-подобному макросу.

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

Lake 18.01.2023 18:28

Другие вопросы по теме