Реальный ответ: вам повезло.Существует три типа кода, которые вы можете передать в компилятор C или C ++:
- Код, который является правильным и поведение которого определяется Стандартом или компилятором
- Код, который полностьюнеправильный, который будет отклонен с ошибкой
- Код, который недостаточно точен, чтобы иметь определенное поведение, но не настолько неверен, чтобы быть отклоненным.
Эта последняя категория "Неопределенное поведение"и это одна из худших вещей в C и C ++.Компилятор примет код, но, скорее всего, он не будет делать то, что вы хотели.Преобразование указателя на функцию в пустой указатель - не то, что вам нужно, и вы, вероятно, хотите, чтобы предупреждение компилятора сообщало вам, что вы допустили ошибку.
Вот список возможных неопределенных действий в C ++. Лучшее, что вы можете сделать, это попытаться повысить уровень предупреждения вашего компилятора.В Visual C ++ используйте /w3
или /w4
, чтобы повысить уровень предупреждения, и во время компиляции он обнаружит более неопределенное поведение.В gcc используйте -ansi -pedantic -W -Wall
, чтобы увеличить уровень предупреждения до полного.