Почему я могу присвоить структуры, но не сравнить их

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

  • Имеют способ отметить файл как "блокировку потребностей" (как свойство "svn:needs-блокировки").
  • На контроле, мерзавец отметил бы такой файл как только для чтения.
  • А новая команда git-lock связалась бы с центральным сервером блокировки, работающим где-нибудь для выяснения у разрешения заблокировать.
  • , Если сервер блокировки дает разрешение, отметьте чтение-запись файла.
  • git-add сообщил бы серверу блокировки хеша содержания заблокированного файла.
  • сервер блокировки наблюдал бы за тем довольным хеш для появления в фиксации на главном репозитории.
  • , Когда хеш появится, выпустите блокировку.

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

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

24
задан user 5 April 2012 в 14:43
поделиться

1 ответ

Per the comp.lang.c FAQ:

There is no good way for a compiler осуществить сравнение структур (т.е. для поддержки оператора == для структур), что соответствует Низкоуровневый вкус C. Простой побайтовое сравнение может привести к на случайных битах, присутствующих в неиспользуемых "дыры" в конструкции (такие отступы используются для сохранения выравнивания из более поздних полей правильные). Для сравнения полей может потребоваться неприемлемое количество повторяющийся код для больших структур. Любое сравнение, созданное компилятором нельзя было ожидать сравнения соответствующие поля указателя во всех случаи: например, часто подходит для сравнения полей char * с strcmp вместо ==.

Если вам нужно сравнить две структуры, вам нужно будет написать свою собственную функцию to do so, field by field.

27
ответ дан 29 November 2019 в 00:10
поделиться
Другие вопросы по тегам:

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