Начал переносить VS2013-проект на Eclipse IDE (G++). Собственно проект состоит из одного .cpp-файла и нескольких .h, которые подключаются к нему (а некоторые - друг к другу) через #include "%filename%.h".
Насколько я смог нагуглить, существуют некоторые "как бы" соглашения о том, как нужно размещать код в заголовочных файлах. В частности, теперь Eclipse (или компилятор?..) в упор не хочет видеть данные (классы и функции) из подключаемых файлов, приходится прописывать extern-ы и прототипы, чего делать для, в общем-то, немаленького количества функций и классов не особо-то и хочется.
До столь близкого знакомства с сабжем я не придавал значения тому, что сам файл тоже является относительно изолированной концепцией. По логике (которой придерживалась и Visual Studio), если указано, куда подставить - надо просто подставить всё, что в файле есть. Теперь вскрываются новые подробности, которые хотелось бы преодолеть как можно более безболезненно.
Поэтому основной вопрос такой: как в C++ просто воткнуть весь код из файла в указанное место, не плодя миллиарды .h/.c/.hpp-файлов с прототипами, реализациями и прочими #ifdef-ами, #ifndef-ами, extern и иже с ними?
Вы так и не поняли такой вещи, как «единица компиляции». Дело в том, что в Си c-файлы компилируются независимо друг от друга (в единую программу всё собирает линкер). А чтобы сказать «оно есть, только в другой единице компиляции», используют прототипы и extern’ы.
А если вы хотите просто внести код в ту же единицу компиляции, просто пишите его в хедере, да и всё. Только в большинстве компиляторов это исключает предкомпилированные хедеры — а ТАКИЕ хедеры вам предкомпилировать, скорее всего, и не нужно.
<брюзга mode on>
Не создают кода (а значит, в традиционной системе с кучей единиц компиляции находится именно в хедерах)
• extern и прототипы
• inline
• не до конца специфицированные шаблоны
• static-поля в классе (но потом это static-поле придётся повторить в какой-нибудь одной единице компиляции)
• может, ещё что-то, только я забыл…
<брюзга mode off>
Вся соль-перец оказалась в самом Eclipse. Меня немного сбило с толку, что в общем-то, до вчерашнего дня я предполагал, что как раз-таки знаю, как работать с заголовочными файлами и что из себя представляют единицы компиляции. До тех пор, пока на валидный со всех точек зрения проект IDE не стала выкидывать кучу предупреждений и ошибок.
Запустил компилятор в обход, через терминал - и все проблемы испарились.
Так или иначе, всегда полезно если не узнать что-то новое, так повторить уже изученное. Спасибо.