В C, делает ли инициализация переменной собственной значимостью? Если да, зачем?
Позвольте мне уточнить. В источниках Git есть несколько примеров инициализации переменной значением undefined, как показано в transport.c или wt-status.c. Я удалил задания из этих объявлений и проверил тесты. Не видя регрессий, я думал, что эти задания были излишними.
С другой стороны, я провел несколько простых тестов с GCC 4.6 и Clang 2.9.
#include <stdio.h>
int main() {
printf("print to increase probability of registers being non-zero\n");
int status = status;
return printf("%i\n", status);
}
Компиляция с -Wall -std=c99
и различными уровнями -O
не выводит никаких предупреждений и показывает, что status == 0
. Тем не менее, Clang с ненулевым уровнем оптимизации печатает некоторые значения мусора. Это делает вывод о том, что результаты таких выражений undefined.
Я могу себе представить, что такое задание может подавлять предупреждение неинициализированной переменной, но это не относится к примерам, взятым из Git. Удаление назначений не вносит никаких предупреждений.
Являются ли такие назначения поведения undefined? Если нет, для чего вы их используете?
Я предложил изменение в списке рассылки Git. Вот что я узнал.