Средство проверки стиля кодирования для C

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

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

ПРИМЕЧАНИЕ. Я ищу что-нибудь для кода C, хотя было бы неплохо и то, что работает для C++.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
20
0
32 443
9
Перейти к ответу Данный вопрос помечен как решенный

Ответы 9

Вы ищете "украшение кода". Uncrustify - бесплатный.

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

Я бы возражал против использования здесь формального инструмента. Лучшее обеспечение соблюдения стандартов кодирования - это давление со стороны сверстников. Давление со стороны сверстников и взаимное уважение между членами команды являются ключевыми элементами этой атмосферы командообразования ... ничем не отличается от добродушного преследования, которое необходимо, когда кто-то непреднамеренно "ломает сборку" и т. д.

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

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

Vinko Vrsalovic 04.01.2009 20:13

@Vinko - вы могли бы это сделать, и это может быть полезно для участников, работающих неполный рабочий день, или для импорта внешнего кода, но для членов команды, работающих полный рабочий день, я действительно верю, что вы хотите, чтобы все они «думали в соответствии со стандартом кодирования», чтобы вы получили реальная выгода от наличия стандарта кодирования в первую очередь.

Tall Jeff 04.01.2009 20:29

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

Ilya 04.01.2009 22:09

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

jwdonahue 23.02.2018 00:48

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

Tall Jeff 06.03.2018 18:11

Для этого существует (или было) множество инструментов. Одним из самых старых является cb (C Beautifier), который использовался в древних версиях Unix - в данном случае это версия 7 Unix:

CB ( 1 ) UNIX Programmer’s Manual CB ( 1 )

NAME
    cb – C program beautifier
SYNOPSIS
    cb
DESCRIPTION
   Cb places a copy of the C program from the standard input on the standard
   output with spacing and indentation that displays the structure of the
   program.
BUGS

GNU indent - гораздо более сложный и настраиваемый зверь. Были и коммерческие инструменты. Например, Программное обеспечение Abraxas предоставляет инструмент CodeCheck, например; мы использовали его ненадолго в середине 90-х, но изменения, которые он хотел от нас внести, были (очень необходимы, но) слишком навязчивыми для руководства.

Стиль делает то, что вы хотите:

Artistic Style is a source code indenter, formatter, and beautifier for the C, C++, C# and Java programming languages.

Для Eclipse доступен Плагин AStyle.

Eclipse также имеет форматировщик кода, но я не уверен, работает ли он в CDT.

Ответ принят как подходящий

Традиционный beautifier отступ, доступный на каждой машине Unix. На некоторых есть версия Отступ GNU, которую можно скомпилировать и установить на любой машине. GNU indent может считывать набор правил из файла ~/.indent.pro, например:

--original --dont-format-first-column-comments --no-blank-lines-after-commas --parameter-indentation 8 --indent-level 8 --line-length 85 --no-space-after-parentheses --no-comment-delimiters-on-blank-lines 

Таким образом, простое выполнение отступа перед фиксацией гарантирует единообразие представления. Если вы хотите использовать принуждать, определите ловушку перед фиксацией в системе управления версиями, которую вы используете, которая будет запускать отступ и отказываться от фиксации, если зафиксированная версия отличается от того, что создает отступ.

Из аналогичного вопроса: Вера ++:

Vera++ is a programmable tool for verification, analysis and transformation of C++ source code.

The main usage scenarios that are foreseen for Vera++ are:

Ensure that the source code complies with the given coding standards and conventions.

Provide source code metrics and statistics.

Perform automated transformations of the source code, which can range from pretty-printing to diagnostics to fault injection and advanced testing.

@Tino Tnx для заметки, обновлено (похоже, GitHub является зеркалом, в то время как основной сайт находится на BitBucket).

Eugen Constantin Dinca 23.10.2018 16:50

Пожалуйста, используйте VIM и наслаждайтесь легкостью. Вы можете делать все, что связано с программированием исходного кода, с помощью простых команд. Также вы можете сделать VIM более надежным и мощным, отредактировав файл .vimrc. Помощь в этом вам очень поможет.

/ Ренджит г

Вы получили отрицательное голосование, потому что исходный вопрос касался красивого принтера кода или средства проверки стиля. А вы отвечаете текстовым редактором. Разница в том, что текстовый редактор - это то место, где вы пишете код, а средство проверки стиля проверяет формат исходного кода независимо от текстового редактора, который использовался. например, это средство проверки стиля: en.wikipedia.org/wiki/Checkstyle

elviejo79 06.04.2016 17:04

Попробуйте UniversalIndentGUI, который представляет собой оболочку графического интерфейса для популярных инденторов / украшений, таких как Uncrustify, Artistic Style и GNU Indent. Его графический интерфейс и функция предварительного просмотра в реальном времени позволяют очень легко попробовать разные инденторы, и как только вы найдете нужный индентор и конфигурацию, вы можете экспортировать конфигурацию или даже экспортировать сценарий оболочки. Отлично, если вы все еще пытаетесь.

Вы можете использовать clang-format. Более подробную информацию можно найти на официальном сайте: http://clang.llvm.org/docs/ClangFormat.html

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