Поделиться через


При использовании имен функций без скобок () код не создается

Обновлен: Ноябрь 2007

При объявлении имени функции в программе без использования скобок компилятор не создает код. Это происходит в независимости от того, принимает функция параметры или нет, потому что компилятор рассчитывает адрес функции; однако из-за того, что оператор вызова функции "()" отсутствует, вызов не происходит. Подобный результат аналогичен следующему примеру:

// compile with /Wall to generate a warning
int a;
a;      // no code generated here either

В Visual C++ даже использование предупреждения 4-го уровня не приводит к диагностическим результатам. Предупреждение не выдается, код не создается.

Следующий пример кода компилируется (с предупреждением) и корректно компонуется без ошибок, но при этом для funcn( ) код не создается. Для корректной работы следует добавить оператор вызова функции "()".

#include <stdio.h>
void funcn();

int main() {
   funcn;      /* missing function call operator; 
                  call will fail.  Use funcn() */
   }

void funcn() {
   printf("\nHello World\n");
}

См. также

Ссылки

Оптимизация кода