Заголовочный файл посреди cpp-файла?
От: musix Россия  
Дата: 04.06.10 12:37
Оценка:
Добрый день!
Скажите, пожалуйста, приемлимо ли включать заголовочные файлы не в самом начале cpp-файла, а там где в них возникает необходимость? Например так:
void printArray(int arr[], int sz);

int main()
{   
    int arr[] = {11,22,33};
    printArray(arr, sizeof arr / sizeof(arr[0]));
    return 0;
}

#include<iostream>

void printArray(int arr[], int sz)
{
    for (int i=0; i<sz; i++){
        std::cout<<arr[i];
    }
}
Re: Заголовочный файл посреди cpp-файла?
От: artem_korneev США https://www.linkedin.com/in/artemkorneev/
Дата: 04.06.10 12:41
Оценка: +1
Здравствуйте, musix, Вы писали:

Язык позволяет, но делать этого не нужно.
С уважением, Artem Korneev.
Re: Заголовочный файл посреди cpp-файла?
От: slava_phirsov Россия  
Дата: 04.06.10 13:05
Оценка: +1
Здравствуйте, musix, Вы писали:

M>приемлимо ли включать заголовочные файлы не в самом начале cpp-файла, а там где в них возникает необходимость?


Несколько раз сталкивался с такими вещами. Насколько я знаю, принято, если файл пишется для включения в середине .cpp файлов, давать ему расширение не .h, а .inl(кажется ).
Люди! Люди, смотрите, я сошел с ума! Люди! Возлюбите друг друга! (вы чувствуете, какой бред?)
Re[2]: Заголовочный файл посреди cpp-файла?
От: musix Россия  
Дата: 04.06.10 15:07
Оценка:
Здравствуйте, artem_korneev, Вы писали:

_>Язык позволяет, но делать этого не нужно.


Ясно дело что позволяет — он ведь вообще не знает ничего про заголовочные файлы. Вопрос в том, ПРИЕМЛИМО ли? Т.е. вляется ли это плохой практикой провоцирующей ошибки или ничего страшного в этом нет?
Re[3]: Заголовочный файл посреди cpp-файла?
От: bnk СССР http://unmanagedvisio.com/
Дата: 04.06.10 15:27
Оценка: 1 (1)
Здравствуйте, musix, Вы писали:

M>Ясно дело что позволяет — он ведь вообще не знает ничего про заголовочные файлы. Вопрос в том, ПРИЕМЛИМО ли? Т.е. вляется ли это плохой практикой провоцирующей ошибки или ничего страшного в этом нет?


Это необычно.
А необычных вещей следует по возможности избегать
Автор: SuhanovSergey
Дата: 05.02.08
, потому как:

- Married?! Jenny can't get married.
— Why not? It's clever, it's unexpected...
— But that's not why people watch TV. Clever things make people feel stupid and unexpected things make them feel scared.

(c) здесь, фрагмент 17

Re[2]: Заголовочный файл посреди cpp-файла?
От: Guard_h4s Россия  
Дата: 04.06.10 15:44
Оценка:
><...>принято<...>давать ему расширение не .h, а .inl(кажется ).

inl — сокращение от inline. Ну и соответствующего назначения)
Re: Заголовочный файл посреди cpp-файла?
От: Sni4ok  
Дата: 05.06.10 08:09
Оценка:
Здравствуйте, musix, Вы писали:

M>Скажите, пожалуйста, приемлимо ли включать заголовочные файлы не в самом начале cpp-файла, а там где в них возникает необходимость?


совершенно нормально, вполне бывает, что какие-то заголовочники требует лишь часть кода, и чтобы не скролить постоянно вверх-вниз, разумно инклудить хедер прямо там где требуется.
Re: Заголовочный файл посреди cpp-файла?
От: dilmah США  
Дата: 05.06.10 08:23
Оценка:
Включать свои собственные (иногда специально для этого разработанные, типа вышеупомянутых .inl файлов) конечно можно.

Включать системные хедеры посередине -- имхо плохой стиль, чреватый неожиданными проблемами.
Re[3]: Заголовочный файл посреди cpp-файла?
От: blackhearted Украина  
Дата: 06.06.10 09:07
Оценка:
Здравствуйте, Guard_h4s, Вы писали:

>><...>принято<...>давать ему расширение не .h, а .inl(кажется ).


G_>inl — сокращение от inline. Ну и соответствующего назначения)


*.inc
Re: Заголовочный файл посреди cpp-файла?
От: blackhearted Украина  
Дата: 06.06.10 09:08
Оценка:
Здравствуйте, musix, Вы писали:

M>Добрый день!

M>Скажите, пожалуйста, приемлимо ли включать заголовочные файлы не в самом начале cpp-файла, а там где в них возникает необходимость? Например так:
M>
void printArray(int arr[], int sz);

M>int main()
M>{   
M>    int arr[] = {11,22,33};
M>    printArray(arr, sizeof arr / sizeof(arr[0]));
M>    return 0;
M>}

M>#include<iostream>

M>void printArray(int arr[], int sz)
M>{
M>    for (int i=0; i<sz; i++){
M>        std::cout<<arr[i];
M>    }
M>}


Имхо это из серии using в хедерах.
Делать можно, но не нужно.
Re[3]: Заголовочный файл посреди cpp-файла?
От: trophim Россия  
Дата: 06.06.10 18:46
Оценка: 1 (1) +1
Здравствуйте, musix, Вы писали:

M>Здравствуйте, artem_korneev, Вы писали:


_>>Язык позволяет, но делать этого не нужно.


M>Ясно дело что позволяет — он ведь вообще не знает ничего про заголовочные файлы. Вопрос в том, ПРИЕМЛИМО ли? Т.е. вляется ли это плохой практикой провоцирующей ошибки или ничего страшного в этом нет?


Ну, ежели у вас свой неймспейс, и вы посреди него включите файл который объявляет нечто в std, то ничего хорошего их этого не выйдет...
... << RSDN@Home 1.2.0 alpha 4 rev. 1446>>
Let it be! — Давайте есть пчелу!
Re[4]: Заголовочный файл посреди cpp-файла?
От: dilmah США  
Дата: 06.06.10 18:48
Оценка:
G_>>inl — сокращение от inline. Ну и соответствующего назначения)

B>*.inc


не, есть школы, в которых именно .inl
Re[5]: Заголовочный файл посреди cpp-файла?
От: blackhearted Украина  
Дата: 06.06.10 19:37
Оценка: :)
Здравствуйте, dilmah, Вы писали:


G_>>>inl — сокращение от inline. Ну и соответствующего назначения)


B>>*.inc


D>не, есть школы, в которых именно .inl


лучше уж .wtf тогда ...
Re: Заголовочный файл посреди cpp-файла?
От: vi.k  
Дата: 07.06.10 02:43
Оценка:
У меня была проблема подобного применения.

Использовал что-то из boost'а, компилятор постоянно выдавал warning об использовании unsafe-функций.

Чтоб убрать, добавил перед функцией, на которой и появлялся warning:
#include <boost/config/warning_disable.hpp> — как раз для таких случаев

А он всё равно выдаёт warning. Мне уже совсем чуть плохо не стало, пока не дошло переместить warning_disable.hpp перед нужным хедэром. Шаблоны!
Re: Заголовочный файл посреди cpp-файла?
От: CreatorCray  
Дата: 07.06.10 07:08
Оценка:
Здравствуйте, musix, Вы писали:

M>Скажите, пожалуйста, приемлимо ли включать заголовочные файлы не в самом начале cpp-файла, а там где в них возникает необходимость? Например так:

Оно то конечно можно, и некоторые выкрутасы основаны на такой возможности.
Но ИМХО без крайней нужды к этому прибегать не стоит.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.