2010-09-23 3 views
2

Что более эффективно с кодом C, с которым я работаю, перемещение моего кода в существующую программу на языке C или включение h файла #, так что он вызывает отдельный файл .c?Что более эффективно с кодом C?

Когда это скомпилировано в .exe, как это работает с тем, что оно включено в исходный код, и имеет файл h и отдельный .c файл?

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

Спасибо, DemiSheep

ответ

9

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

Что один .c файла может изменение, однако, скорость компиляции, что может быть быстрее для одного файла, чем за кучу файлов, которые должны быть связаны между собой. IIRC, одна из причин, по которой предпочтительный метод распространения источника SQLite - это один огромный «объединенный C-файл» - это скорость компиляции.


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

+0

Ответы Eli также верны при использовании библиотек (нормально, кроме нагрузки на очень небольшие накладные расходы). –

+0

@Mario: вы подразумеваете динамические библиотеки, конечно (.so/.dll). Аналогичным образом, статическая привязка не влияет на скорость выполнения кода. –

+0

Немного о скорости компиляции - мусор. Если вы разделите код на несколько исходных файлов, вы, как правило, сможете скомпилировать гораздо быстрее, потому что вам нужно только скомпилировать исходные файлы, которые вы изменили. Это принято практиковать и было с самого начала 'make'. – JeremyP

0

Я знаю, что это уже есть хороший ответ, который не говорит никакой разницы, но хотел бы добавить этот

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

Я бы написал это сам, но msdn docs сказать это довольно красиво.

Смежные вопросы