Как назвать переменные, которые являются структурами - PullRequest
2 голосов
/ 25 апреля 2010

Я часто работаю над частными проектами, использующими WinApi, и, как вы, возможно, знаете, он имеет тысячи именованных структур и структур с определением типа, например MEMORY_BASIC_INFORMATION.

Я остановлюсь на этом вопросе в моем вопросе: что еще предпочтительнее, или лучше, если вы хотите назвать переменную этого типа. Есть ли какое-нибудь руководство по стилю для этого случая?

Например, если мне нужна эта переменная для функции VirtualQueryEx.

Некоторые идеи:

 MEMORY_BASIC_INFORMATION memoryBasicInformation;   
 MEMORY_BASIC_INFORMATION memory_basic_information;

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

MEMORY_BASIC_INFORMATION basicInformation;
MEMORY_BASIC_INFORMATION information;

Краткая форма?

 MEMORY_BASIC_INFORMATION mbi;

Я часто вижу этот стиль, используя сокращение от имени структуры.

 MEMORY_BASIC_INFORMATION buffer;

VirtualQueryEx определяет третий параметр lpBuffer (где вы передаете указатель на структуру), поэтому использование этого имени также может быть идеей.

Приветствия

Ответы [ 3 ]

2 голосов
/ 25 апреля 2010

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

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

MEMORY_BASIC_INFORMATION currentFrame;

Или, если вы проводите тестирование информации о памяти для какого-либо статуса, возможно, это кандидат.

MEMORY_BASIC_INFORMATION candidate;

Теперь вы можете написать документацию, например, "структура кандидата для тестирования ...".

Вы можете обнаружить, что по-прежнему хотите включать информацию о типе, используя местоположение префикса типа. Если это так, вы можете назвать это mbiCurrentFrame или mbiCandidate.

Если цель или контекст действительно абстрактны, как, например, в случае самих функций API, я бы выбрал что-то простое и прямое, такое как info или buffer, за исключением случая, когда эти имена могут каким-то образом быть неверно истолкованы в контексте.

0 голосов
/ 25 апреля 2010

Попробуйте сохранить регистр и аббревиатуру typedef, например,

MEMORY_BASIC_INFORMATION MBI_temp

Я имею дело с большим количеством кода, который должен и должен оставаться переносимым в Linux и Windows, для нас это тоже было проблемой.

Вы также можете сделать это в случае верблюда:

MEMORY_BASIC_INFORMATION MBITemp

.. но это не кажется само собой разумеющимся.

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

Ключ в том, чтобы быть последовательным в каждом дереве, с которым вы работаете. Это действительно только заметная проблема в двух случаях:

  1. Глобал
  2. Функции длинной мили

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

Досадно, что это может внести некоторую странность из-за подсветки синтаксиса, выбирающей его как константу, но это также относится и к базовому typedef.

0 голосов
/ 25 апреля 2010

Я думаю, что это зависит от ряда проблем, и вам просто нужно найти наилучший баланс при стремлении к читабельности.

  1. Ширина окна
  2. Переменные / типы похожих имениспользуется в подпрограмме.

При этом, если бы я мог сойти с рук, я бы, вероятно, использовал ...

MEMORY_BASIC_INFORMATION  info;

Если бы были другие подобные типы или переменныеимена, тогда я бы добавил какой-то описательный модификатор, такой как ...

MEMORY_BASIC_INFORMATION  memBasicInfo;

Или, если реальная площадь окна была ограничена (некоторые проекты, над которыми я работал, настаивали на максимуме в 80 символов),Я мог бы пойти на ...

MEMORY_BASIC_INFORMATION  mbi;

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

Немного повсюду, но я надеюсь, что это поможет.

...