-
- Чтобы не было противоречия, определение и объявление делать в одном
месте (в заголовочном файле), а для этого нужно определять куда он
подключен. Ну это моя практика, можно, конечно, всё раскидать по
файлам и надеяться что совпадёт. - VladislavS.(24.04.2024 07:19)
- По-моему, нельзя (ну уж по крайней мере не следует) делать
определение в заголовочном файле. Всё, что приводит к выделению
памяти, не важно, переменных или программы, должно определяться в
*.c. А в заголовочных файлах должны быть лишь объявления, не
обязывающие выделять память. Nikolay_Po(74 знак., 24.04.2024 09:29)
- Как то раз я сделал простой тест для Linux Tyмблep(1733 знак., 25.04.2024 18:13)
- Достаточно просто заифдефить чтобы заголовочный файл только в одном
с-файле выдал без extern. - VladislavS.(24.04.2024 22:39)
- Фу, как грубо :-) Хотя я тоже такими приемчиками пользуюсь, только
для файлов с различными конфигами. - il-2(25.04.2024 07:39)
- очень даже нормуль для глобальных переменных(а вот они глобальные
переменные - это фу как грубо :) У мну с незапамятных времен С89
макрос для этого есть abivan(219 знак., 25.04.2024 09:07)
- На что не пойдёшь, лишь бы плюсами не пользоваться. - VladislavS.(25.04.2024 16:05)
- Такое оправдывает только необходимость поддержки нескольких
конфигураций... И то, мне непонятно, где это полезно. - Nikolay_Po(25.04.2024 09:17)
- это позволяет совместить определение и описание в одном месте,
чтобы не писать дважды. Смысл писать дважды, если можно один раз. abivan(41 знак., 25.04.2024 09:37, картинка)
- Самое страшное слово - extern Tyмблep(440 знак., 27.04.2024 17:30)
- С моими ключами компиляции, такое точно не пройдёт. Будет
предупреждение-ошибка на третьем. - Nikolay_Po(27.04.2024 22:06)
- Да. Скажэт, что множэственное переопределение. Покажэт где текущее и где предыдущее. Но да, по возможности, определяю глобальных в одном месте. - mse homjak(29.04.2024 14:50)
- Потенциально неприятная ситуация. Tyмблep(692 знак., 29.04.2024 14:17)
- С моими ключами компиляции, такое точно не пройдёт. Будет
предупреждение-ошибка на третьем. - Nikolay_Po(27.04.2024 22:06)
- Ага, примочка для облегчения размножения глобальных переменных? Пожизненный эцих с гвоздями! Правильные пацаны делают структуру. А у меня вообще привычка делать static переменные в модулях и функции для доступа к ним. Не люблю глобальные переменные. - SciFi(25.04.2024 09:39)
- Ну, это имеет смысл, если всё в одном файле, а не в паре. Например,
если вся функция, включая её исполняемый код - в заголовочном файле
и файла .c вообще нет. Если есть два места, то несложно написать
дважды. - Nikolay_Po(25.04.2024 09:38)
- не сложно, но зачем? Вопрос религии и вкусовщины. А в каком файле
написать определение, если переменная равноиспользуется в
нескольких файлах. В любом? А почему в этом, а не в этом? Сразу
возникает неопределенность. - abivan(25.04.2024 09:49)
- Если прямо совсем равноиспользуемая и её используют многие модули, многие файлы, то я помещу эту переменную в "control.c" или в "system.c" или даже в "main.c". В зависимости от того, чей заголовочный файл будет разумно и достаточно включать в использующий переменную код. - Nikolay_Po(25.04.2024 10:12)
- не сложно, но зачем? Вопрос религии и вкусовщины. А в каком файле
написать определение, если переменная равноиспользуется в
нескольких файлах. В любом? А почему в этом, а не в этом? Сразу
возникает неопределенность. - abivan(25.04.2024 09:49)
- Самое страшное слово - extern Tyмблep(440 знак., 27.04.2024 17:30)
- это позволяет совместить определение и описание в одном месте,
чтобы не писать дважды. Смысл писать дважды, если можно один раз. abivan(41 знак., 25.04.2024 09:37, картинка)
- очень даже нормуль для глобальных переменных(а вот они глобальные
переменные - это фу как грубо :) У мну с незапамятных времен С89
макрос для этого есть abivan(219 знак., 25.04.2024 09:07)
- Фу, как грубо :-) Хотя я тоже такими приемчиками пользуюсь, только
для файлов с различными конфигами. - il-2(25.04.2024 07:39)
- ИМХО, современные компилеры не включают код функцыи, дажэ из "*.с",
если функция не задействована в программе. - mse homjak(24.04.2024 10:53)
- По-разному бывает. У того же GCC нужно правильные настройки сделать, чтобы так было. Бывает так, что юзверь недоумевает "а чего это он лишний код не выкинул?", а всё потому, что юзверь не научился правильно крутить настройки. - SciFi(24.04.2024 11:10)
- Это другое. Линкер, встретив в разных объектниках две одинаково
названные переменные или функции, будет ругаться, даже если эти
переменные ни где не используются и будут выкинуты. - AlexBi(24.04.2024 10:59)
- Я про то, что "выделение памяти". - mse homjak(24.04.2024 11:04)
- По-моему, нельзя (ну уж по крайней мере не следует) делать
определение в заголовочном файле. Всё, что приводит к выделению
памяти, не важно, переменных или программы, должно определяться в
*.c. А в заголовочных файлах должны быть лишь объявления, не
обязывающие выделять память. Nikolay_Po(74 знак., 24.04.2024 09:29)
- Даже полезно иметь их в общей единице трансляции для проверки
согласованности. - =AlexD=(23.04.2024 11:05)
- О, круто, спасибо всем! - Mty1(23.04.2024 18:18)
- Чтобы не было противоречия, определение и объявление делать в одном
месте (в заголовочном файле), а для этого нужно определять куда он
подключен. Ну это моя практика, можно, конечно, всё раскидать по
файлам и надеяться что совпадёт. - VladislavS.(24.04.2024 07:19)