Я изучал некоторые сложные темы в 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 строки кода?
Мне было интересно, насколько они распространены в кодовых базах производственного уровня? Я видел, как они использовались в некоторых небольших проектах после небольшого исследования, но мне было интересно, есть ли у кого-нибудь еще опыт их более широкого использования.





Макросы обычно становятся более сложными, чем это? Или обычно это 1-2 строки кода?
Макросы, безусловно, могут быть более сложными, и иногда они так и делают. Однако мне не ясно, насколько распространено использование оператора ##. Макросы, подобные объектам, редко бывают длиннее одной или двух строк, но макросы, подобные функциям (те, которые принимают аргументы), часто длиннее.
Мне было интересно, насколько они распространены в кодовых базах производственного уровня?
Очень трудно сказать. Детали использования макросов зависят от истории проекта, соглашений и принципов стиля. И мнения о макросах и их правильном использовании со временем изменились. Никто не может по-настоящему изучить весь корпус C-кода повсюду.
Однако я склонен предположить, что сложные макросы с большей вероятностью будут появляться в больших кодовых базах и в более старых. В больших базах кода, потому что более сложные макросы с большей вероятностью будут (воспринимаются) полезными в более сложном коде. В старых базах кода как потому, что более длинная история дает больше времени для введения сложных макросов, так и потому, что новый код сравнительно чаще использует вместо этого добросовестные функции.
[Мне] было интересно, есть ли у кого-нибудь еще опыт их более широкого использования.
Конечно, у многих так. Но общепринятое мнение в наши дни состоит в том, что обычно вы должны предпочесть функцию функционально-подобному макросу.
Спасибо за понимание! Я собираюсь начать просматривать некоторые устаревшие кодовые базы на Github или Gitlab, просто чтобы посмотреть, что я могу найти! C — действительно классный язык, и я хочу посвятить больше времени его более глубокому пониманию! Если у вас есть предложения по проектам, книгам и т. д., которые вы считаете полезными, дайте мне знать!
checkout boost.org и вы увидите чрезвычайно сложные макросы C