2013-12-17 5 views
0

Я определил функцию как этотстатическая переменная инициализируется с неправильным значением

static void 
flatten_tree(...) 
{ 
    static int num = 0; 
    ... 
} 

Однако, когда функция выполняется, num получает случайное значение, а не 0 при первом запуске. После последующих вызовов функций он ведет себя как статический var. Являются ли статические переменные явно инициализированными нулем? Каков правильный способ его инициализации?

+5

как вы знаете, это не инициализируется до 0? вы можете показать нам? –

+0

Какой компилятор/версия? –

+0

@ fernando.reyes Я изучаю это с помощью gdb. '(GDB) б flatten_tree' ' Breakpoint 2 в 0x81cd496' 'Breakpoint 2, flatten_tree (...) в ...' ' (GDB) р num' ' $ 1 = 7' – mrvn

ответ

0

Если он не установлен на ноль при первом вызове, то ваша реализация C нарушена, ваш отладчик сломан, или вы сделали некоторую другую ошибку - я не буду комментировать, какой наиболее вероятный сценарий: -)

Если вы действительно хотят видеть, что он делает, Ставить код временно что-то вроде:

static void 
flatten_tree(...) 
{ 
    static int num = 0; 
    printf("XYZZY DEBUG: initial num is %d\n", num); 
    exit(1); 

    ... 
} 
Смежные вопросы