2012-07-04 3 views
1

Я видел это на программу, я мастерить:статического сопзЬ пустота *() метод в C

static const void *method() 
{ 
// other code 
return anotherMethod(param1,param2); 
} 

За то, что я понимаю, это будет возвращать указатель на функцию. Теперь на основе this, я пытаюсь понять это то, что static const void применяются к:

int f(void); 
int *fip(); //Function returning int pointer 
int (*pfi)(); //Pointer to function returning int 

Так каковы реальные преимущества добавив static const (при условии, это применяется к возвращению на сумму назначенного функции). Также будет вызван указатель возврата на функцию? Или это просто указатель на это? Потому что из кода у меня есть следующее:

void start() 
{ 
    method(); 
} 

Я предполагаю, что он будет называться, в противном случае он был бы назначен на указатель.

+1

Просто боковое сообщение: я считаю, что вы путаете C и C++. В C++ 'start()' означает 'start (void)', а первый - стиль стиля. Но в C функция 'start()' означает "принимает различные нежелательные параметры в надежде на тонкие ошибки". В C вы всегда должны писать 'start (void)'. Функция без параметров помечена как устаревшая функция в стандарте C и может быть удалена с языка в будущем (см. C11 6.11.6). – Lundin

+0

Я фактически использую контекст объектно-с, и имя метода было полностью произвольным. Но спасибо за примечание стороны. – Peres

ответ

10

Нет, функция вернет const void*, а static ограничивает видимость функции в области файлов.

+0

Хорошо, так что, если меня не волнует возвращение, есть ли веская причина, чтобы фактически вернуть 'const void *'? Это хорошая практика? – Peres

+3

Он информирует вызывающего абонента, что возвращаемое значение не должно изменяться, поэтому да, это полезно. Тем не менее, 'const'ness можно отбросить, но, по крайней мере, намерение ясно, и вызывающий должен умышленно отбросить его, а не случайно изменить его. – hmjd

1

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

пример вы дали, вернутся

const void* 

И воля отказалась ссылки на любые внешние ссылки на эту функцию.

0
static const void *method() 

Он возвращает «const void *». Это может быть указатель функции, введенный в void *, но в целом это не должно быть так.

void start() 
{ 
    method(); 
} 

Здесь вызывающий объект просто не заинтересован в результате. Ничего волшебного не происходит вообще.

3

static означает, что функция является частной для блока компиляции (исходного файла) и не видна за ее пределами.

const void * означает, что возвращаемое значение является указателем на постоянную память, то есть память, на которую не следует записывать.

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