Я думал, что локальная переменная в C не инициализирована. Но когда я скомпилировал этот код с gcc.Локальная переменная, инициализированная до нуля в C
void f() {
static int s;
int n;
printf("static s = %d\n", s++);
printf("local n = %d\n", n++);
f();
}
main() {
f();
}
И запустить этот код, частичный результат:
static s = 0
local n = 0
static s = 1
local n = 0
static s = 2
local n = 0
static s = 3
local n = 0
static s = 4
local n = 0
static s = 5
local n = 0
...
static s = 261974
local n = 0
static s = 261975
local n = 0
static s = 261976
local n = 0
static s = 261977
local n = 0
static s = 261978
local n = 0
static s = 261979
local n = 0
static s = 261980
local n = 0
static s = 261981
local n = 0
Segmentation fault: 11
Может кто-нибудь, пожалуйста, объясните это? Или обратитесь к стандартной ссылке, что C не будет инициировать локальные вары?
Поведение не определено; все может случиться. – arshajii
@wannik - Удача. Но не берегите его. Это неопределенное поведение. Лучше включите предупреждения компилятора –
Да, undefined. См. Также несколько предыдущих ответов в разделе «Связанные» справа. Серьезно, если вы хотите, чтобы он был инициализирован 0, используйте явное начальное значение. – keshlam