Существуют ли хорошо известные «профили» стандарта C?

Я пишу код C, который делает определенные предположения о реализации, например:

  • char - 8 бит.
  • целочисленные типы со знаком являются дополнением до двух.
  • >> на целых числах со знаком расширяет знак.
  • целочисленное деление округляет отрицательные частные до нуля.
  • double является двойным по стандарту IEEE-754 и может быть перфорировано по типу в и из uint64_t с помощью ожидаемый результат.
  • сравнения с участием NaN всегда оцениваются как ложные.
  • нулевой указатель - это все нулевые биты.
  • все указатели данных имеют одинаковое представление и могут быть преобразованы в size_t и обратно снова без потери информации. Арифметика указателя
  • на char * такая же, как и обычная арифметика на size_t . Указатели функций
  • могут быть преобразованы в void * и обратно без потери информации.

Все это - вещи, которые стандарт C не гарантирует, поэтому, строго говоря, мой код i s непереносимый. Тем не менее, они верны для архитектур и ABI, на которые я в настоящее время нацелен, и после тщательного рассмотрения я решил, что риск того, что они не смогут удержать некоторую архитектуру, на которую мне нужно будет ориентироваться в будущем, приемлемо низок. по сравнению с прагматическими преимуществами, которые я получаю от предположений сейчас .

Вопрос в том, как мне лучше всего задокументировать это решение? Многие из моих предположений сделаны практически всеми (неоктетные char s? Или знаковые целые числа? О будущей коммерчески успешной архитектуре?). Другие более спорны - вероятно, наиболее рискованным является указатель на функции. Но если я просто перечислю все, я предполагаю, что помимо того, что дает мне стандарт, глаза читателя просто потускнеют, и он может не заметить те, которые действительно имеют значение.

Итак, есть ли какие-нибудь. хорошо известный набор предположений о том, что я являюсь "несколько ортодоксальной" архитектурой, которую я могу включить в качестве ссылки, а затем только явно задокументировать, где я выхожу за рамки этого? (Фактически такой "профиль" определил бы новый язык, который является расширенным набором C,но он может не признать это в стольких словах - и, возможно, это не прагматически полезный способ думать об этом).

Уточнение : Я ищу сокращенный способ документа мой выбор, а не способ автоматической проверки того, соответствует ли данный компилятор моим ожиданиям. Последнее тоже, очевидно, полезно, но не все решает. Например, если к нам свяжется деловой партнер и скажет: «Мы создаем устройство на базе нового чипа Google G2015; будет ли ваше программное обеспечение работать на нем?» - тогда было бы неплохо иметь возможность ответить «мы еще не работали с этой аркой, но это не должно быть проблемой, если у нее есть компилятор C, который удовлетворяет тому-то и тому-то».

Уточнение даже больше , так как кто-то проголосовал за закрытие как «неконструктивный»: я не ищу здесь обсуждения, только указателей на фактические, существующие, формальные документы, которые могут упростить мою документацию путем включения в качестве ссылки.

12
задан Henning Makholm 24 August 2011 в 14:53
поделиться