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


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

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

// 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");
}

См. также

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