Какие соглашения об именах обычно используются в C? Я знаю, что их как минимум два:
- GNU / linux / K&R с функциями lower_case_functions
- ? название ? с функциями UpperCaseFoo
Я говорю только о C. Большинство наших проектов - это небольшие встроенные системы, в которых мы используем C.
Вот тот, который я планирую использовать в своем следующем проекте:
C Соглашение об именах
Struct TitleCase
Struct Members lower_case or lowerCase
Enum ETitleCase
Enum Members ALL_CAPS or lowerCase
Public functions pfx_TitleCase (pfx = two or three letter module prefix)
Private functions TitleCase
Trivial variables i,x,n,f etc...
Local variables lower_case or lowerCase
Global variables g_lowerCase or g_lower_case (searchable by g_ prefix)
c
naming-conventions
JeffV
источник
источник
Ответы:
Здесь самое главное - последовательность. Тем не менее, я следую соглашению о кодировании GTK +, которое можно резюмировать следующим образом:
MAX_BUFFER_SIZE
,TRACKING_ID_PREFIX
.GtkWidget
,TrackingOrder
.gtk_widget_show()
,tracking_order_process()
.GtkWidget *foo
,TrackingOrder *bar
._refrobnicate_data_tables()
,_destroy_cache()
.источник
static
и пропускать префикс модуля, поэтому, если бы этоgtk_widget_show()
была функция с областью файлов, она стала бы простоwidget_show()
со статическим классом хранения._
для реализации и использования в будущем. Есть несколько исключений из имен, начинающихся с,_
но, на мой взгляд, их не стоит запоминать. Безопасное правило - никогда не использовать_
в коде имена, начинающиеся с . Соответствующая запись в FAQ по C: c-faq.com/~scs/cgi-bin/faqcat.cgi?sec=decl#namespaceGlobal variables: just don't use global variables. They are evil.
- если вы не работаете над встроенным проектом и у вас 1024 байта ОЗУ и процессор 8 МГц.«Указатели на структуры» не являются объектами, для которых требуется соглашение об именах. Они просто
struct WhatEver *
. НЕ скрывайте тот факт, что существует указатель, связанный с умным и "очевидным" typedef. Он бесполезен, больше предназначен для ввода и нарушает баланс между объявлением и доступом.источник
Ну, во-первых, у C нет публичных / частных / виртуальных функций. Это C ++, и у него другие соглашения. В C обычно есть:
C ++ более сложен. Я видел здесь настоящий микс. Верблюжий регистр для имен классов или строчные буквы + подчеркивания (по моему опыту чаще встречается верблюжий регистр). Структуры используются редко (и обычно потому, что они требуются библиотеке, иначе вы бы использовали классы).
источник
external linkage
«публичные функции» иinternal linkage
«частные функции».ALL_CAPS
также часто используется для значений перечисления.Знаете, мне нравится, когда это просто, но понятно ... Итак, вот что я использую в C:
i,n,c
и т. Д. (Только одна буква. Если одна буква непонятна, сделайте ее локальной переменной)lowerCamelCase
g_lowerCamelCase
ALL_CAPS
p_
к префиксу. Для глобальных переменных это будетgp_var
для локальных переменныхp_var
, для константных переменныхp_VAR
. Если используются дальние указатели, используйтеfp_
вместоp_
.ModuleCamelCase
(Модуль = полное имя модуля или сокращение из 2–3 букв, но все еще внутриCamelCase
.)lowerCamelCase
ModuleCamelCase
ALL_CAPS
ModuleCamelCase
CamelCase
CamelCase
Я набираю свои структуры, но использую одно и то же имя как для тега, так и для typedef. Тег не предназначен для широкого использования. Вместо этого предпочтительнее использовать typedef. Я также передаю объявление typedef в заголовке общедоступного модуля для инкапсуляции, чтобы я мог использовать имя typedef'd в определении.
Полный
struct
пример :источник
Кодируя одновременно C #, java, C, C ++ и объект C , я принял очень простое и понятное соглашение об именах, чтобы упростить себе жизнь.
Прежде всего, он опирается на мощь современных IDE (таких как eclipse, Xcode ...), с возможностью быстро получать информацию, наведя курсор мыши или нажав ctrl ... Принимая это, я запретил использование любого префикса, суффикса и другие маркеры, которые просто выдаются IDE.
Затем соглашение:
параметры, элементы структуры и объединения
И это все.
Это дает
источник
Я бы рекомендовал не смешивать случай верблюда и разделение подчеркивания (как вы предлагали для членов структуры). Это смущает. Вы бы подумали: «Привет, у меня есть,
get_length
так что мне, наверное, следовало бы попробовать»,make_subset
и тогда вы узнаете, что это действительно такmakeSubset
. Используйте принцип наименьшего удивления и будьте последовательны.Я считаю CamelCase полезным для ввода имен, таких как структуры, определения типов и перечисления. Но это все. Для всего остального (имена функций, имена членов структуры и т. Д.) Я использую underscore_separation.
источник
Вот (по-видимому) необычный, который я нашел полезным: имя модуля в CamelCase, затем подчеркивание, затем имя функции или области видимости файла в CamelCase. Так например:
источник
Меня смущает одно: вы планируете создать новое соглашение об именах для нового проекта. Как правило, у вас должно быть соглашение об именах для всей компании или группы. Если у вас уже есть проекты, которые имеют какое-либо соглашение об именах, вам не следует менять соглашение для нового проекта. Если приведенное выше соглашение является просто кодификацией ваших существующих практик, тогда вы золотой. Чем больше он будет отличаться от существующих стандартов де-факто, тем труднее будет получить представление о новом стандарте.
Единственное, что я хотел бы добавить, - мне понравился _t в конце типов в стиле uint32_t и size_t. Для меня это очень C-ish, хотя некоторые могут пожаловаться, что это просто "обратный" венгерский.
источник
Вы также должны подумать о порядке слов, чтобы упростить автоматическое завершение имени .
Хорошая практика: имя библиотеки + имя модуля + действие + тема
Если часть не актуальна, просто пропустите ее, но всегда должны быть представлены хотя бы имя модуля и действие.
Примеры:
os_task_set_prio
,list_get_size
,avg_get
OS_TASK_PRIO_MAX
источник
Их может быть много, в основном IDE диктуют некоторые тенденции, и соглашения C ++ также продвигаются. Для C обычно:
Венгерская нотация для глобальных переменных подходит, но не для типов. И даже для банальных имен используйте хотя бы два символа.
источник
Я думаю, это может помочь новичку: соглашение об именах переменных в c
источник