В Dlang documentation состояния:Почему я не могу получить ошибки компилятора для неиспользуемых локальных переменных?
Это ошибка объявить локальную переменную, которая никогда не упоминается. Мертвые переменные, такие как анахроничный мертвый код, являются всего лишь источником путаницы для программистов обслуживания.
Я составил следующий код в ldc 0.14
, gdc 5.1
и dmd 2.067.1
:
void main()
{
int i;
//local variable i not used...
}
я не получил каких-либо ошибок компилятора. Если это не скомпилируется?
«Ошибка использования локальной переменной без предварительного присваивания ей значения»: вы правы, это не имеет никакого смысла для инициализированных переменных по умолчанию. Я думаю, что единственным случаем, когда компилятор мог ошибиться, является то, что вы явно инициализировали переменную '= void' перед ее чтением. – jpf
Ну, инициализация по умолчанию предназначена для того, чтобы помочь поймать неинициализированные ошибки переменных! Вот почему по умолчанию значение char не равно нулю, а скорее недействительным модулем кода utf-8. Вот почему плавает по умолчанию значение NaN, поэтому их использование становится очевидным. Но нет никакого NaN или null для int ... он просто становится 0, что на самом деле очень полезно, поэтому теперь люди зависят от него как функция удобства, а не функция обнаружения ошибок! –
Что сказал Адам. Это также помогает быстрее писать определенный код, например, объявлять переменную перед областью. Вам не нужно будет устанавливать для него значение по умолчанию, которое, в любом случае, будет переопределено. скажем, в статическом цикле. Большинство компиляторов, которые обнаруживают неинициализированные переменные ex.компилятор C# не обнаружит этого ex. цикл всегда будет выполняться. – Bauss