Именование Include Guards

В моем (ограниченном) опыте,

- (CGSize)sizeWithFont:(UIFont *)font forWidth:(CGFloat)width lineBreakMode:(UILineBreakMode)lineBreakMode

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

- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size

, действительно кажется, уважает новые строки.

кроме того, текст на самом деле не представляется наверху UITextView. В моем коде я установил новую высоту UITextView, чтобы быть на 24 пикселя больше, чем высота, возвращенная эти sizeOfFont методы.

22
задан Brian Tompsett - 汤莱恩 19 June 2016 в 16:19
поделиться

3 ответа

1110 Я лично следую рекомендации Буста. Это, пожалуй, одна из самых больших коллекций хороших библиотек C ++, и у них нет проблем.

Это выглядит как:

<project>_<path_part1>_..._<path_partN>_<file>_<extension>_INCLUDED

// include/pet/project/file.hpp
#ifndef PET_PROJECT_FILE_HPP_INCLUDED

, что:

  • законно (обратите внимание, что начинать с _[A-Z] или содержать __ нет)
  • легко генерировать
  • гарантированно быть уникальным (в качестве включающего средства защиты) в проекте (иначе у вас есть два файла в одном месте)
  • гарантированно не будет использоваться ни для чего другого (если Вы заканчиваете другой макрос с INCLUDED, который вы портите для боя)

Я читал о GUID, но они выглядят странно.

И очевидно, что лучше, чем все компиляторы, реализуют #pragma once (или лучше, #pragma multiple и «один раз» будет поведением по умолчанию ...)

23
ответ дан 29 November 2019 в 03:40
поделиться

Как уже упоминалось ранее, очень распространенным соглашением является использование заглавной версии имени, а точка заменяется подчеркиванием: foo.h -> FOO_H

. Однако это может привести к конфликтам имен. с простыми и / или общими именами. По этой причине автоматически сгенерированный заголовок, такой как stdafx.h, в непустых проектах Visual C C ++ добавляет некоторую случайную строку, например:

#ifndef FOO_H__NsknZfLkajnTFBpHIhKS
#define FOO_H__NsknZfLkajnTFBpHIhKS
#endif

http://www.random.org/strings/ является полезным генератором случайных чисел для этого.

Кроме того, если файл является частью какого-то подмодуля или его содержимое находится в одном конкретном пространстве имен, я склонен добавить это и к охраннику:

#ifndef SOMECOMPONENT_FOO_H__NsknZfLkajnTFBpHIhKS
#define SOMECOMPONENT_FOO_H__NsknZfLkajnTFBpHIhKS

namespace somecomponent
{
  ...
}

#endif
3
ответ дан 29 November 2019 в 03:40
поделиться

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

1
ответ дан 29 November 2019 в 03:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: