правильный C рефакторинг - PullRequest
4 голосов
/ 14 сентября 2010

У меня есть следующие файлы: a.h, a.c, b1.c, b2.c и в b1 и b2 у меня есть некоторые определения макросов, которые идентичны.переместить их в a.h или более распространено оставлять их в файле, где они используются?Как правильно сделать это в C?

Ответы [ 5 ]

8 голосов
/ 14 сентября 2010

Распространено определение макросов, которые разделяются между файлами, в заголовок, который включает оба этих файла.Вы должны убедиться, что файл, в который вы перемещаете это определение, является подходящим файлом для него;не перемещайте его в совершенно не связанный заголовок только потому, что он включен в оба файла.Если нет логического связанного заголовочного файла для b1.c и b2.c, возможно, вам следует создать b.h для совместного использования между ними.

1 голос
/ 14 сентября 2010

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

1 голос
/ 14 сентября 2010

Все, что плавает на вашей лодке.

Если a.h как-то связан с этим макросом, то это хорошее место. Если он помещен туда «только потому, что» a.h уже включен в b1.c и b2.c, это не проблема проектирования, скорее это проблема «удобства». Возможно, это лучше, чем дублирование, но в идеале, если это не связано с ах, возможно, вы могли бы поместить его в bh (так как оно связано с b) или handymacros.h (так как это не совсем b, но a не использует его) .

1 голос
/ 14 сентября 2010

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

1 голос
/ 14 сентября 2010

Я бы сказал, что нет ничего плохого в перемещении макроса на ах, если он включен в оба файла кода, при условии, что для всех файлов имеет смысл включить ах

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