Какова история с расширением отладчика SOS (Son of Strike)?

@Bo Persson правильно заявляет в своем замечательном ответе здесь :

====================== ====================================

При передаче массива в качестве параметра этот

void arraytest(int a[])

означает то же, что и

void arraytest(int *a)

================================ ==========================

Однако позвольте мне также добавить, что это:

означает то же самое, f3]

, что означает точно такое же, как

void arraytest(int a[1])

, что означает точно такое же, как

void arraytest(int a[2])

, что означает точно такое же, как

void arraytest(int a[1000])

и т. д.

На самом деле значение «размер» внутри параметра массива здесь, по-видимому, предназначено только для эстетической / самостоятельной документации и может быть любым целым положительным (size_t типом Я думаю) вы хотите!

На практике, однако, вы должны использовать его для указания минимального размера массива, который вы ожидаете от функции, чтобы при написании кода вам легко отслеживать и проверять. Стандарт MISRA-C-2012 ( купит / загрузит 236-страничный PDF-версия стандарта для £ 15,00 здесь ) до тех пор, пока не будет указано:

Правило 17.5. Аргумент функции, соответствующий параметру, объявленному для типа массива, должен иметь соответствующее количество элементов.

blockquote>

...

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

blockquote>

...

Использование декларатора массива для параметра функции более четко определяет интерфейс функции, чем использование указателя. Минимальное количество элементов, ожидаемых функцией, явно указано, тогда как это невозможно с указателем. [emphasis added]

blockquote>

Другими словами, они рекомендуют использовать формат явного размера, даже если стандарт C его технически не применяет - он по крайней мере помогает вам разъяснить как разработчик, так и другим, используя код, какой размер массива ожидает функция.

38
задан ThinkingStiff 30 June 2012 в 04:11
поделиться

2 ответа

Джейсон Зандер пост в блоге прекрасно объясняет это:

Оригинальное название команды CLR (выбран основателем команды и бывшим Заслуженный инженер Майкрософт Майк Toutonghi) было «Освещение». Ларри Команда разработчиков Салливана создала ntsd расширение dll, чтобы облегчить загрузка v1.0. Мы назвали это strike.dll (понять? "Молния Забастовка"? ага, знаю, ба'дамп бомж). PSS действительно нуждался в этом, чтобы дайте нам информацию обратно в команду когда пришло время избавиться от неприятного стресса провалы, которые почти всегда делаются со стеком отладчика Windows. Но мы не хотели раздавать наш полный strike.dll, так как он содержал некоторые "опасные" команды, которые, если вы действительно не было нашего исходного кода может вызвать у вас смятение и боль (даже другим командам Microsoft). Так что я подтолкнул команду к созданию «Сына Strike" (Саймон из нашего разработчика берет кредит / вина за это), и мы отправили это с продуктом, начинающимся с Эверетт (он же V1.1).

Кроме того, я слышал, что CLR раньше называлась COM+ 2.0, но, видимо, в свое время у нее было несколько названий (из здесь):

Среда выполнения CLR живет в DLL с именем MSCOREE.DLL, что означает Microsoft Common Object Runtime Engine Execution Engine. «Common Object Runtime» или COR — одно из многих названий этой технологии за время ее существования. Другие включают службы Windows следующего поколения (NGWS), универсальную среду выполнения (URT), Lightning, COM+ и COM+. 2.0

55
ответ дан 27 November 2019 в 02:42
поделиться

Некоторое время назад это обсуждалось в подкасте Скотта Хансельмана с Тесс Феррандес. Оно происходит от внутреннего кодового имени, использовавшегося ранее на платформе .NET. Больше информации в стенограмме шоу.

5
ответ дан 27 November 2019 в 02:42
поделиться
Другие вопросы по тегам:

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