2013-11-21 1 views
1

Я видел код, как это обычно в начале исходных файлов в CЦель включает охранники в .c файл

#ifndef _INCLUDE_GUARDS_C 
#define _INCLUDE_GUARDS_C 

main() 
{ 

} 

function1() 
{ 
} 

#endif 

function2() 
{ 
} 

Я смущен о цели этого ..?

Я знаю, если включать охранники определяют в заголовочных файлах, но

  1. что цель они включают охрану в исходных файлах? и

  2. Почему функция2() определяется вне защитных ограждений?

+0

http://en.wikipedia.org/wiki/Include_guard –

+1

Задавать цели этих охранников в исходных файлах (.c) не в файлах заголовков (.h) – user2798118

+0

Ничего не мешает вам включать исходные файлы из другого источника файлы, кроме увеличения вероятности получения вашего P45. В таком экземпляре может использоваться защита множественного включения. Должен сказать, – Bathsheba

ответ

5

Нет никакой пользы для включения включенных охранников в исходный файл с исходным кодом C или C++.

Я реализовал препроцессор с нуля и изучил включенные охранники примерно столько же, сколько человек, и это совершенно бессмысленно.

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

+0

Я не реализовал препроцессор и не изучал охранников, но я все равно могу сказать, что использование защитников в исходном файле бессмысленно (если вы не включили этот исходный файл, в этом случае у меня есть более сильные вещи) , – mah

+0

@mah Здесь, кажется, нет лучшего аргумента, кроме как от авторитета, и еще немного, чтобы отделить какой-либо ответ от комментария. – Potatoswatter

+0

Я не выражал никакой озабоченности по поводу вашего ответа (или того, что вы отправили как ответ, а не комментарий) ... скорее, я говорил, что в этом случае авторитет не особенно полезен. Чтобы идти гиперболическим по аналогии, если бы вы говорили мне, что сброс арбуза из 3-этажного здания вызовет его брызги на удар, мне не нужно будет слышать о вашей степени физики, чтобы поверить вам ... Я бы взял вы на свое слово :) – mah

0

Старый вопрос, но ...

Я думаю, что можно было бы использовать при тестировании кода. При тестировании вам нужен доступ к локальным функциям, которые не определены в заголовке, поэтому вы включаете файл .c ... Да, это уродливо. Да, у вас есть better options!

Для функций, которые не определены в заголовке, вам не нужен защитник включения.

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