Ответ 1
Да - стандарт C ISO/IEC 9899: 1999 aka < Стандарты i1 > (и С++) говорят, что это должно быть так. См. Пункт 10 в разделе 6.7.8 ( "Инициализация" ) WG14 N1256 для точного текста.
Как указывали другие, рекомендуется всегда инициализировать статические переменные:
static int idx = 0;
Причина этого заключается не в том, что некоторые компиляторы не всегда могут инициализировать статические переменные до нуля (любой компилятор, который не смог выполнить такую инициализацию, был бы окончательно разорван и не мог претендовать на компилятор C или С++), это сказать, что вы имеете в виду - возможно, самое основное правило программирования.