Когда я пишу этот код и скомпилировать с /W4
Используется потенциально неинициализированная локальная переменная? Зачем?
long r;
__try { r = 0; }
__finally { }
return r;
я получаю:
warning C4701: potentially uninitialized local variable 'r' used
Почему это происходит?
Если 'r = 0' не выполняется, не будет ли исключение исключение? – Mehrdad
Возможно, но вы используете переменную, которую компилятор не может определить на 100%, будет инициализирован, поэтому вы получите сообщение об ошибке. Блок try добавляет двусмысленность относительно того, будет ли r инициализирован. Как человек легко определить r будет инициализирован, но ваш компьютер не человек. – JonBWalsh
Если бы существовал блок '__except' (« catch »), я бы понял, так как переменная останется неинициализированной через блок catch ... но я действительно не понимаю, почему это происходит здесь, поскольку AFAIK невозможно для переменная остается неинициализированной. – Mehrdad