2009-11-14 2 views
25

Интересно, имеет ли соглашение об именах, используемое в стандартных библиотеках C/C++, имя или, по крайней мере, чит-лист, где я могу найти правила. Например.Название соглашения о присвоении имен stdlib C/C++?

push_back -- underscore used 
setstate  -- but not used here! 
string::npos -- when to use abbreviations? 
fprintf 
... 

Имеет ли соглашение об именах, используемое в стандартных библиотеках C/C++ определенное имя?

+9

Кроме того, странная верхняя буква букв 'std :: ios_base :: Init' o_O –

+0

Что ?! Также используются заглавные буквы! : P – AraK

+41

Это называется «Какое бы дерьмо мы не пришли на эту неделю». –

ответ

3

Печальная истина - нет настоящего соглашения.

См. Аргумент порядка функций stdio как болезненное напоминание.

+2

Существует веская причина для на самом деле. С традиционным вызовом функции C ABI, вызывающим несколько функций с тем же последним аргументом (т. Е. 'For (i = 0; i ephemient

0

У меня нет ответа, но, по крайней мере, я не думаю, что C и C++ используют одно и то же соглашение об именах.

+0

Не могли бы вы объяснить больше? – AraK

+0

Такие вещи, как fprintf, strlen, itoa (содрогание) происходят из библиотек C. У них есть соглашение с нижним регистром, без подчеркивания и тяжелой аберрации. Библиотеки C - это те, которые начинаются с «c» в C++: cstdio, cstring, cmath и т. Д. – UncleBens

+0

Как 'C' имеет имя' strpbrk', а 'C++' имеет имя 'sync_with_stdio', а не' swstdio' :) –

24

C/C++ использует известное соглашение об именовании соглашений о создании и использовании. В общем, единственное, что можно сказать о стандартном именовании библиотек C/C++, состоит в том, что он не использует случай верблюда (за исключением шаблонов типов C++ STL), он использует имена классов и функций в нижнем регистре и (иногда) использует символы подчеркивания для разделения слов. Но использование символов подчеркивания больше связано с C++; C, в частности, имеет тенденцию сокращать слова, например. strlen, memcpy. Вероятно, это связано с тенденцией использовать очень короткие названия для вещей в первые дни UNIX.

+17

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

+19

Компиляторы pre-ansi считали только первые 6 символов символа, чтобы быть совместимыми с Fortran, IIRC, поэтому символы strlen, strlenxyz и strlenohmygodwhathaveidone все ссылались на одно и то же. Таким образом, для совместимости с пре-ANSI-компиляторами стандарт ANSI C гарантировал, что первые 6 символов всех стандартных символов библиотеки были уникальными между собой. –

6

Я думаю, что разные группы придуманы в разное время разными людьми и используют несколько разных конвенций: библиотеки C, потоки, строки, STL (контейнеры + алгоритмы + итераторы). У меня такое чувство, что последнее можно рассматривать как соглашение, которое устанавливает пример для таких вещей, как boost и C++ 0x naming.

8

В стандартной библиотеке C есть well defined rules, вы должны следовать, чтобы избежать конфликтов имен. Я ничего не знаю о C++.

Если вы думаете, что это беспорядок, вы должны проверить библиотеку PHP ...

+0

+1 для ссылки. Больше имен зарезервировано, чем вы понимаете, например типы, заканчивающиеся на '_t'. – u0b34a0f6ae

+0

@kaizer: afaik резервирование '_t' является ограничением POSIX – Christoph

+0

Да. C сохраняет только те, которые начинаются с 'uint' или' int' и заканчиваются на '_t'. –

0

Я не думаю, что это имя для любого набора именования.

Соглашения об именах в стандартах C и C++ отличаются друг от друга, хотя и слабо связаны между собой.

В частности, в библиотеке C никакая функция или имя макроса не содержит символ подчеркивания (AFAICR), в отличие от библиотеки C++.

Большинство конвенций по именованию библиотеки C контролировались прецедентом; он стандартизовал существующую практику (примерно в 1984 году), с удивительно небольшим количеством изобретений (главным образом, обработка локалей через <locale.h>).

Библиотека C++ также была основана на прецеденте, но существует другой набор прецедентов, и я думаю, что можно утверждать, что STL не был широко распространен до его принятия стандартом, поскольку функции в библиотеке C были ,