2012-03-21 4 views
8

Я натолкнулся на часть кода, написанную кем-то еще. В заголовочных файлах есть несколько глобальных функций, объявленных как статические. Сами функции определяются в отдельных файлах реализации. AFAIK, определение статической функции не видно за пределами единицы перевода, где определена функция. Если да, то в чем смысл объявления статических функций в заголовочных файлах?Объявление статических глобальных функций в файлах заголовков

// in some header file 
static void foo(); 


// in some implementation file 
static void foo() 
{ 
.... 
.... 
} 
+0

Это стоит посмотреть на: http://stackoverflow.com/questions/92546/variable-declarations-in-header-files-static-or-not –

ответ

6

Ну, функции, объявленные static видимы только в исходном файле они определены в. Хотя объявлять их в отдельном заголовке не является хорошей идеей. Я тоже видел некоторые случаи, когда разработчики это делали. Они делают это, чтобы упорядочить их в порядке, чтобы они могли вызывать одну функцию от другой. Вот что я имею в виду:

/* In header */ 
static void plus(int); 
static void minus(int); 
static void multiply(int); 

/* In source file */ 
static void minus(int v) 
{ 
    /* So plus can be called in minus without having to define it 
    * before minus */ 
    plus(); 
} 

static void plus(int v) { /* code */ } 

Но ИМХО это довольно губительный способ сделать это. Лучшим решением является просто прототип функций static в исходном файле перед их внедрением.

+1

Согласен, это ужасный способ прототипирования функций. Хорошо, что парень, который написал этот код, больше не работает для нас. – pic11

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