Ссылка на идентификаторы в коде, но не использование их - PullRequest
0 голосов
/ 10 января 2019

Я буквально писал код и совершил такую ​​ошибку:

int f () 
{
 . . .
}

int g;

int main()
{
 . . .
 if (f) { 
  // this is actually true
 }
}

Позже я проверил и конструкции вроде:

f;
g;

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

UPD: только что проверил и поведение то же самое, используя VS и minGW.

1 Ответ

0 голосов
/ 10 января 2019

Функции распадаются на указатели на себя, т. Е. Обычный f равен &f. И при использовании указателя в таком состоянии он проверяет, является ли указатель нулевым или нет.

Другими словами,

if (f) { ... }

равно

if (&f != NULL) { ... }

В этом случае это может не иметь особого смысла (так как &f всегда будет отличным от нуля), но указатели на функцию вполне пригодны в других местах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...