используя макрос, определенный в заголовочных файлах - PullRequest
2 голосов
/ 07 апреля 2010

У меня есть определение макроса в заголовочном файле, например:

// header.h
ARRAY_SZ(a) = ((int) sizeof(a)/sizeof(a[0]));

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

Теперь мне нужно использовать этот макрос в каком-то исходном файле, у которого нет других причин включать header.h или любые другие заголовочные файлы, включенные в header.h, поэтому я должен переопределить макрос в моем исходном файле или просто включить заголовочный файл header.h.

Повлияет ли последний подход на размер кода / время компиляции (я думаю, да) или время выполнения (я думаю, нет)?

Ваш совет по этому поводу!

Ответы [ 6 ]

5 голосов
/ 07 апреля 2010

Включите заголовочный файл или разбейте его на более мелкие единицы и включите его в исходный заголовок и в свой код.

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

4 голосов
/ 07 апреля 2010

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

3 голосов
/ 07 апреля 2010

Должен ли я переопределить макрос в моем исходном файле или просто включить заголовочный файл header.h.

Ни. Вместо этого вы должны очистить код и разбить header.h, чтобы можно было использовать ARRAY_SZ(), не получая при этом ничего другого.

2 голосов
/ 07 апреля 2010

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

Пойдите для того, что кажется более читабельным / поддерживаемым.

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

2 голосов
/ 07 апреля 2010

Вы спрашиваете:

Будет ли последний подход влиять на размер кода / время компиляции (думаю да)

В случае конкретного макроса ответ «нет» на размер, потому что выражение sizeof может быть оценено во время компиляции и, следовательно, «да» для времени. Ни один из них, вероятно, не будет иметь значительного отдаленного значения.

1 голос
/ 07 апреля 2010

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

...