Начнем с оператора косвенности *
:
6.5.3.2 p4: Оператор унарного * обозначает косвенность. Если операнд указывает на функцию, результат будет обозначать функцию; если он указывает на объект, результатом будет lvalue, обозначающий объект. Если операнд имеет тип «указатель на тип», результат имеет тип «тип». Если для указателя присвоено недопустимое значение, поведение унарного
blockquote>*
оператора не определено. 102)* E, где E - нулевой указатель, является неопределенным поведением.
Существует сноска, которая гласит:
< blockquote>102) Таким образом,
blockquote>&*E
эквивалентно E (даже если E - нулевой указатель) и & amp; (E1 [E2]) - ((E1) + (E2 )). Всегда верно, что если E является обозначением функции или значением l, которое является допустимым операндом унарного & amp; оператор, * & amp; E - обозначение функции или lvalue, равное E. Если * P - это lvalue, а T - имя типа указателя объекта, * (T) P - это значение l, которое имеет тип, совместимый с тем, что где T указывает.Это означает, что & amp; * E, где E является NULL, определяется, но вопрос в том, верно ли то же самое для & amp; (* E) .m, где E - нулевой указатель, а его тип - это структура, которая имеет член m?
. Стандарт C не определяет это поведение.
Если бы оно было определено, возникли новые проблемы , один из которых приведен ниже. C Standard корректен, чтобы сохранить его неопределенным и предоставляет макрос offset, который обрабатывает проблему внутренне.
6.3.2.3 Указатели
blockquote>
- Целочисленное постоянное выражение с значение 0 или такое выражение, отлитое от типа void *, называется константой нулевого указателя. 66) Если константа нулевого указателя преобразуется в тип указателя, результирующий указатель, называемый нулевым указателем, гарантированно сравнится неравномерно с указателем на любой объект или функцию.
Это означает, что целочисленное постоянное выражение со значением 0 преобразуется в константу нулевого указателя.
Но значение константы нулевого указателя не определено как 0. Значение определено реализацией.
7.19 Общие определения
blockquote>
- Макросы имеют значение NULL, которое расширяется до константы нулевого указателя, определяемой реализацией
. Это означает, что C разрешает реализацию, где нулевой указатель будет иметь значение, где установлены все биты, и используя членский доступ к этому значению приведет к переполнению, которое является неопределенным поведением
. Другая проблема заключается в том, как вы оцениваете & amp; (* E) .m? Применяются ли скобки и сначала оцениваются
*
. Решение этой проблемы решает эту проблему.
Мерзавец глубок и может быть хитрым сначала. Я сказал бы, что это определенно не для всех, особенно если у Вас есть разработчики или другие нетехнические люди, бывшие должные зарегистрироваться и. На нашем текущем проекте мы выполняем svn бэкэнд, и три разработчика приняли решение использовать мерзавца, в то время как два продолжают использовать svn и совершенно довольны и продуктивны.
Тем не менее у мерзавца есть много для предложения. Не становясь слишком глубокими в колдовство мерзавца, можно быстро учиться использовать в своих интересах некоторые его самые популярные аспекты: способность зарегистрироваться локально, не продвигая в восходящем направлении к основному repo, и почти абсолютно беспрепятственному ветвлению и слиянию.
Вы можете сделать, чтобы очень удовлетворяющий мерзавец испытал с основным небольшим количеством команд.
Из всех ресурсов там, Scott Chacon Получение Мерзавца - то, что продало меня на преимуществах мерзавца и дало мне мотивацию для проталкивания крутой части кривой обучения.
Мерзавец чрезвычайно быстр и хранит репозитории очень компактным способом (думайте одна десятая к сотому размер той же кодовой базы + история в svn). Мерзавец (и наиболее распределенный VCS) дает Вам дешевые ответвления, которые безболезненно порождены, продолжили работать и объединились. Это все происходит локально, и члены команды не отвлечены продолжающейся работой товарищей по команде, если нет превентивное усилие совместно использовать ее.
Перемещение в распределенный VCS приведет к некоторым изменениям в стиле разработки, который будут любить некоторые разработчики, но другие могут ненавидеть. Нет никакого вопроса, что мерзавец является сложным зверем, где существует много путей к тому же результату. В продвижении миграции группы мерзавцу необходимо будет инвестировать некоторое время в изучение тех путей и затем изобразить схематически рабочий процесс и шпаргалку команд для общих сценариев.
я рекомендовал бы сначала стать довольным им как клиент, говоря github или подобный инструмент.
По Вашему вопросу о разработчиках и меньшем количестве технических людей, использующих его, я сказал бы, документируются ли рабочий процесс и команды очень хорошо, то с некоторым обучением они должны смочь войти в курс дела на нем. Будут ли они ценить его, целый другой вопрос! :-)
Один инструмент, который стоит проверить, наблюдательный совет , это - фантастический инструмент обзора кода команды и, кажется, имеет плагин мерзавца.
Я только что начал использовать мерзавца месяц назад, и любите его. Его быстрое и простое в использовании и для команд и для людей. Не очень трудно учиться, и я не должен был осваивать новые технические навыки для использования мерзавца. Я знаю, что это поддерживает миграцию от CVS/SVN. Большая часть - то, что можно все еще поддержать рабочий процесс стиля CVS/SVN, должен Вы хотеть к.
я предлагаю смотреть на мерзавца Wiki: http://git.or.cz/gitwiki и официальный сайт: http://git-scm.com/
я надеюсь, что это помогает, и Вы любите использовать мерзавца.
На вершине моей головы:
, основная трудность состоит в том, чтобы установить рабочий процесс между другим repos, не повреждая историю того, что было уже опубликовано (продвинутый общественности repo).
переоснову в особенности может быть трудно использовать правильно сначала, так как она действительно переписывает историю ответвления, и это изменяет SHA1, который связан с нею: к общедоступному ответвлению, которое означает много слияний от других разработчиков, вытягивающих от него.
char_traits<char>
и со стандартной специализацией, присвоение, сравнения и упорядочивание определяются как эквивалент для встроенного символьного типа.
– David Rodríguez - dribeas
13 October 2009 в 19:25
Много людей говорит о том, как сложный мерзавец должен использовать, но это не стоит ничего, что, если Вы придерживаетесь очень простого мерзавца шаблона использования, не является больше сложным, чем говорят RCS.
Используя мерзавца для Вашего собственного управления версиями локали (для того же вида вещей Вы использовали бы RCS), я спорил бы легче, чем использование RCS.
, Конечно, при использовании его для больших проектов с загрузками людей и большим ветвлением и т.д. затем, это может стать более сложным, чем традиционные системы управления версиями.
Лично я использовал его главным образом для персональных проектов и для того, чтобы иметь локальное управление версиями на работе. Мы используем по необходимости на работе, и они довольно строги о количестве ответвлений, которые мы можем сделать, в каком мы можем зарегистрироваться. Мы добрались для регистрации в законченных, способных компиляцией, тестируемых блоках кода.
Часто я работал над большими заданиями рефакторинга, и меньшее выполнение закрепляет на стороне одновременно. Я нашел это очень трудным манипулировать по необходимости. Но с мерзавцем я смог иметь загрузки маленьких ответвлений локали для различных экспериментов, рефакторинга и устранения ошибки, которое я делал.
Так для меня привлекательные для покупателя качества мерзавца:
причина последней точки состоит в том, что мерзавец сохраняет все ответвления в том же каталоге, таким образом, Вы подкачиваете между ними с командами мерзавца и остаетесь такими же место. Мне нравится этот, потому что это означает, что я не должен настраивать конфигурационные файлы для своего IDE для нового каталога каждый раз, когда я перехожу, и я не трачу впустую загрузки пространства от наличия безумных чисел ответвлений.
Github! На самом деле, я научился ценить git только с помощью github.
Я понимаю, что это вопрос о Git, но OP должен понимать, что многие из преимуществ применимы ко всем основным распределенным системам управления версиями. У Git, Mercurial и Bazaar есть свои сильные и слабые стороны, поэтому вам следует изучить все три и решить, какой из них лучше всего подходит для вашего стиля работы и ваших проектов.
История GIT - классика в истории FOSS. См. историю Git в Википедии. Теги для этой истории: BitKeeper, Эндрю Триджелл , Torvalds, Git, самообслуживание за 2 дня .
Ну, это не ответ, кто-то с отношением FOSS / Hacker наверняка с удовольствием прочитает это.