История изменений
Исправление LINUX-ORG-RU, (текущая версия) :
Глобальные и статические переменные стандартом 89/99 принудительно индустриализуются как 0
ибо хранятся они в .bss
в .data
загруженного исполняемого файла, а не в стеке или куче. Переменные с автоматическим скором жизни (на стеке) будучи неопределенны явно имеют неопределённое значение (просто мусор который в ячейке памяти лежал до её взятия).
Исходя из этого и того что .bss
и .data
о которых ты в целом вообще знать не должен и тебе глубоко должно быть на них по баробану могут быть отредактированы и вообще.
Тупо инициализируй всегда и всё. Исключение это данные которые ты будешь целиком заполнять, их просто нет смысла сначала записывать нулями, а затем чем-то ещё.
Но в целом, инициализируй всё и всегда. Так ты обеспечишь как минимум корректность на уровне данных. И уже потом можно будет (всегда можно) выкинуть многие бесполезные инициализации.
Я долгое время свято верил что всё выделяемое на стеке всегда равно нулям. Не знаю почему =)
Если при любом раскладе возникают сомнения (не это случай только, а вообще) рожай в голове мысль на время Всё что не явно то UB порой надеешься на что-то, а оно не то, компилёр с причудами, флаги какие или ещё что. Потом эту мысль можно выкинуть. Но если что сразу про неё вспоминать и делать правки в поиске истины следуя за этой мыслью неуклонно.
Сам не умею ничего вот и учу =)
Чем больше сишников тем лучше. Учи учи и не сдавайсо!
Исправление LINUX-ORG-RU, :
Глобальные и статические переменные стандартом 89/99 принудительно индустриализуются как 0
ибо хранятся они в .bss
в .data
загруженного исполняемого файла, а не в стеке или куче. Переменные с автоматическим скором жизни (на стеке) будучи неопределенны явно имеют неопределённое значение (просто мусор который в ячейке памяти лежал до её взятия).
Исходя из этого и того что .bss
и .data
о которых ты в целом вообще знать не должен и тебе глубоко должно быть на них по баробану могут быть отредактированы и вообще.
Тупо инициализируй всегда и всё. Исключение это данные которые ты будешь целиком заполнять, их просто нет смысла сначала записывать нулями, а затем чем-то ещё.
Но в целом, инициализируй всё и всегда. Так ты обеспечишь как минимум корректность на уровне данных. И уже потом можно будет (всегда можно) выкинуть многие бесполезные инициализации.
Я долгое время свято верил что всё выделяемое на стеке всегда равно нулям. Не знаю почему =)
Если при любом раскладе возникают сомнения (не это случай только, а вообще) рожай в голове мысль на время Всё что не явно то UB порой надеешься на что-то, а оно не то, компилёр с причудами, флаги какие или ещё что. Потом эту мысль можно выкинуть. Но если что сразу про неё вспоминать и делать правки в поиске истины следуя за этой мыслью неуклонно.
Сам не умею ничего вот и учу =)
Исходная версия LINUX-ORG-RU, :
Глобальные и статические переменные стандартом 89/99 принудительно индустриализуются как 0
ибо хранятся они в .bss
в .data
загруженного исполняемого файла, а не в стеке или куче. Их инициализация происходит во время компиляции программы, а не исполнения. Переменные с автоматическим скором жизни (на стеке) будучи неопределенны явно имеют неопределённое значение (просто мусор который в ячейке памяти лежал до её взятия).
Исходя из этого и того что .bss
и .data
о которых ты в целом вообще знать не должен и тебе глубоко должно быть на них по баробану могут быть отредактированы и вообще.
Тупо инициализируй всегда и всё. Исключение это данные которые ты будешь целиком заполнять, их просто нет смысла сначала записывать нулями, а затем чем-то ещё.
Но в целом, инициализируй всё и всегда. Так ты обеспечишь как минимум корректность на уровне данных. И уже потом можно будет (всегда можно) выкинуть многие бесполезные инициализации.
Я долгое время свято верил что всё выделяемое на стеке всегда равно нулям. Не знаю почему =)
Если при любом раскладе возникают сомнения (не это случай только, а вообще) рожай в голове мысль на время Всё что не явно то UB порой надеешься на что-то, а оно не то, компилёр с причудами, флаги какие или ещё что. Потом эту мысль можно выкинуть. Но если что сразу про неё вспоминать и делать правки в поиске истины следуя за этой мыслью неуклонно.
Сам не умею ничего вот и учу =)