The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Стиль именования переменных в Си программах. (gcc howto)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: gcc, howto,  (найти похожие документы)
Date: Thu, 25 Apr 2002 08:24:56 +0000 (UTC) From: Lev Walkin <[email protected]> Newsgroups: fido7.ru.unix.prog Subject: Стиль именования переменных в Си программах. > подскажешь как лучше давать имена переменным (сейчас пользую такой способ: > типобъектаИмяОбъекта, так и с функциями, но получается очень длинно, > избыточно), где-то слышал про другой принцип наименования (unix'овский все > маленькими буковками с подчеркиваниями в качестве разделителей), может > ссылку кинет кто? Или прям здесь расскажет? Первое, на что ты ссылаешься - т.н. венгерский способ. Активно пропагандируется майкрософтом - иначе в обилии околовиндового API, насчитывающего несколько тысяч базовых вызовов, не разберешься. Достоинства: вид лексемы содержит максимум информации о ней в компактной форме. Пример: hwndMainWindow - хендлер моего главного окошка. Недостатки: вид лексемы зело-зело страшен и велик. Часто избыточек, что побуждает программистов вместо for(iNumObj = 0; iNumObj < cMaxObjects; iNumObj++) (черт возьми, чуть клавиатуру не раздолбал набирать эту строчку) писать нечто вроде for(i = 0; i < cMaxObjects; i++) для локальных небольших циклов, тело которых обозримо. В целом рекомендации по использованию венгерской записи включают в себя использование длинных мнемоничных идентификаторов в случае более глобальных объявлений (чтобы не запутаться и не забыть), и уменьшать их постепенно до однобуквенных обозначений в случае более локальных объявлений. (В принципе, если отвлечься от case distinctions и обозначения типов в лексеме, то же самое верно и для других нотаций) Например: const int cMaxApples = 32; typedef struct AppleTree_s { Apple_t **Apples; int iAppleCount; } AppleTree_t; int FillAppleProperties(AppleTree_t *aTree) { int tNum; assert(aTree) assert(aTree->iAppleCount >= 0 && aTree->iAppleCount < cMaxApples); for(tNum = 0; tNum < tMaxApples; tNum++) { aTree->Apples[tNum] = ...; } return 0; } [о ужас, это же постоянный Shift, Shift, SHift, ^H^H^H^H). В общем, с читабельностью получается все более-менее в порядке, но с написабельностью появляются проблемы. Работать шифтом может быть удобнее, если шифт вынесен отдельной педалью, но не у всех есть подобная конструкция. Есть более старый способ, который элиминирует как раз эти пляски с шифтами, позволяя более эффективно использовать слепой метод. Этот метод - просто забыть о различиях в капитализации символов и использовать знаки подчеркивания, вспоминать короткие английские слова и внятные сокращения. В этом случае можно пойти еще дальше - так как кодирование типа в лексеме во многих случаях избыточен. Тот же самый код в данной нотации: const size_t max_apples = 32; typedef struct apple_tree_s { apple_t *apples; size_t apple_count; } apple_tree_t; int fill_apple_props(apple_tree_t *atree) { size_t t; assert(atree); assert(atree->apple_count < max_apples); for(t = 0; t < max_apples; t++) { atree->apples[tnum] = ...; } return 0; } В принципе, читаемость даже повысилась, на предвзятый взгляд. Из-за того, что не приходится постоянно соскакивать с кейса на кейс. Да и писать гораздо удобнее и быстрее. Ну в общем правила, для такого стиля: 1. Чем глобальнее имя, тем но должно быть более самодокументирующимся. 2. Короткие английские слова, сокращения, и их комбинации через underscore в качестве имен функций. 3. имя_count, или имя_size для указания размера соседнего поля структуры, если нужно использовать подобные типы данных. 4. Окончания _s для структур, _t для typedefs, _e для enums. 5. Использовать enums вместо кучи #define. P.S. можно почитать man perlstyle, man style, info gcc про стили. -- Lev Walkin [email protected]

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ RSS ]
  • 1, patriot (??), 06:58, 30/05/2007 [ответить]  
  • +/
    Вот вопрос: ты говоришь, Shift нажимать не удобно, а нижний почерк (_) - 2 клавиши надо нажать (Shift + "-"). еужто нажать сочетание клавишь быстрее, чем просто Shift?
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру