На 100% безопасно ли удалять конечные пробелы из исходных файлов .c/.h?

Я хотел бы автоматизировать удаление всех конечных пробелов из файлов .c и .h, чтобы уменьшить количество мусора, вызывающего конфликты слияния в истории git и т. Д.

Есть ли какой-нибудь мыслимый способ изменить результат этапа компиляции? Или это совершенно безопасно делать автоматически?

1 ответ

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

      #define FOO bar\<space> 

где <space>представляет собой пробел. Перед обрезкой обратная косая черта выходит из пробела, что, я думаю, не имеет никакого эффекта. Но когда вы удаляете пробел, он выходит за пределы новой строки, поэтому следующая строка станет частью расширения.

Поскольку нет причин писать такое экранированное пространство, это кажется очень маловероятной проблемой. На самом деле, если есть код, который выглядит так, я думаю, более вероятно, что они намеревались написать многострочное расширение, а пространство было добавлено случайно.

Вне макросов и строковых литералов все последовательности пробелов обрабатываются как один пробел, и нет никакой разницы между пробелами и новой строкой.

ОБНОВИТЬ:

Этот случай на самом деле неверен. C не допускает escape-последовательности за пределами строковых или символьных литералов, и только символы новой строки могут быть экранированы с помощью обратной косой черты. У GCC есть расширение, которое рассматривает это как экранированный символ новой строки (на случай, если программист допустил ошибку, описанную выше), и при этом выводит предупреждение. Таким образом, удаление пробелов приведет к тому же результату, но избавится от предупреждения.

Другие вопросы по тегам