Примеры, показывающие, как переключение на современный компилятор C может помочь обнаружить ошибки? - PullRequest
2 голосов
/ 30 марта 2012

Я готовлю заметку, чтобы убедить людей, что переключение с GCC2 на GCC4 (в качестве компилятора C) - хорошая идея.

В частности, я думаю, что это может выявить существующие ошибки. Я хотел бы привести примеры, но, как программист на Java, мой опыт в таких ситуациях ограничен. Один пример - проверка типа возврата, я думаю.

Какие еще убедительные примеры показывают, что переключение на современный компилятор может помочь обнаружить ошибки, которые существуют в коде C?

Ответы [ 2 ]

0 голосов
/ 30 марта 2012

Я предполагаю, что у этих людей есть определенный кусок кода, с которым они используют gcc2.Лучше всего просто взять этот код и скомпилировать его в gcc4 со всеми возможными предупреждениями и сравнить разницу.

Некоторые другие различия между gcc2 и gcc4, вероятно, будут следующими:

  • Лучшее время компиляции (gcc4, вероятно, быстрее)
  • Гораздо лучшее время выполнения кода (gcc4 лучше оптимизирует и знает архитектуру процессора, которой не было, когда вышел gcc2).*
  • Лучшее предупреждение / сообщения об ошибках
  • Я уверен, что в gcc4
0 голосов
/ 30 марта 2012

Ну, некоторые опции gcc, которые очень полезны при обнаружении ошибок:

  • -finstrument-functions - помогает построить трассировщик стека вызовов функций.Особенно на архитектурах, где встроенная область действия __builtin_return_address() ограничена только текущей функцией под рукой.Stack Tracer вместе с файлом символов компоновщика, созданным с помощью опции компоновщика -Map, являются незаменимыми инструментами для обнаружения утечек памяти (предположим, вы разрабатываете встроенную систему, в которой Valgrind не может быть запущен и т.полезно для определения того, где код записывает байты в память вне буфера.Таким образом, эта опция обнаруживает ошибки типа переполнения буфера.

Errr ... только эти две опции имеют в виду.Возможно, есть еще что-то, чего я не знаю ...

...