2016-08-23 1 views
2

КонтекстФункция, используемая одной функции в файле заголовок

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

Exemple

int a(int x) // make x = 10 in a recursive way and its purpose is limited 
      // to be used with function b 
{ 
    if (x == 10) return x; 
    else if(x<10) return a(x+1); 
    else return a(x-1); 
} 

int b(int x, int allow_b) // This is only an exemple, function b simply call function a if required. 
{ 
    if (allow_b == 1) return a(x); 
    else return x; 
} 

Вопрос

Поскольку функция «а» существуют только для использования «Ъ», должно быть что-то особенно должно быть сделано в файле заголовка или следует только прокомментировать функцию 'a', используемую 'b'?

Есть ли что-то не так с этим подходом?

Редактировать

Я имею в виду то, что должно быть объявлено в заголовке, я не говорю о написании функции «а» и «B» в файле заголовка.

ответ

4

Если функция a используется только b, то я не вижу необходимости ее декларировать в любом файле заголовка.

Поместите обе функции в одну единицу перевода и объявите и определите функцию a с привязкой static в качестве дополнительного ограничения, которое предотвратит ее доступность из других единиц перевода.

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

+0

Я как раз собирался написать почти этот ответ. +1 – Cody

+0

Я не понимаю, как это сделать? Мне еще нужно объявить заголовок –

+0

Нет, вы этого не делаете."void foo() {} int main() {foo();}", это будет скомпилировано и запущено. Смотрите: вы вызвали foo() из main(), и вам не нужно было иметь глупый файл заголовка в любом месте, чтобы сделать это. –

1

Ваш файл C++ будет содержать ОПРЕДЕЛЕНИЯ (т.е. реализации) от a и b - в порядке, вы показали (a определенные выше/впереди b).

Что входит в ваш файл заголовка, будет только объявление из b. (Если у вас нет сильной уважительной причины, не определить свои функции в файле заголовка.)

Вы предоставите заголовочный файл и файл библиотеки для ваших клиентов, и они не будут ничего о a знаю.

Если вы не хотите какое-либо связей для a бы то ни было, искать анонимных имена. (C злоупотребляет ключевым словом static с той же целью и, следовательно, также доступен на C++)

namespace { 
    int a(int x) 
    { 
    // whatever 
    return x; 
    } // end function definition 
} // end anonymous namespace 

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

  • Нет связанных вопросов^_^