По какой-то причине я не должен добавлять проверку GUID в свою программу Visual C ++? - PullRequest
0 голосов
/ 21 декабря 2010

Чтобы сделать мою программу Visual C ++ более надежной, я испытываю желание вставить проверки, что GUID переменные содержат действительные GUID версии 4 (и не остаются неинициализированными):

GUID guid;
UuidCreate( &guid );
// many lines of code later...
// the following assert should not fire for valid version 4 GUIDs
int data3 = guid.Data3;
assert( ( data3 >> 12 ) == 4 );

Я полностью уверен, что все идентификаторы GUID обычно поступают из функции UuidCreate() или являются неинициализированными переменными (и именно это я и хотел бы диагностировать с помощью этих проверок).Меня беспокоит только то, что Microsoft может внезапно изменить реализацию GUID в будущих версиях Windows.

Какие еще факторы я должен учитывать, чтобы решить, не повредят ли такие проверки?Также, насколько вероятно, что реализация GUID изменится в будущих версиях Windows?

Ответы [ 2 ]

4 голосов
/ 21 декабря 2010

Меня беспокоит только то, что Microsoft может внезапно изменить реализацию GUID в будущих версиях Windows.

С этим справиться, если это произойдет.Нет, серьезно, вы могли бы также беспокоиться о реализации integer, Microsoft может решить переключиться на типы данных .NET и сделать для integer общесистемного значения 4 байта.

Беспокоиться о другихесли реализации меняются, вам все равно придется переписать / изменить / исправить программу.

Редактировать: Если я вас правильно понимаю, вы беспокоитесь о вернуть значение функции, а не саму GUID-структуру.И вы имеете в виду, что в данный момент он может возвращать либо GUID, либо неинициализированное значение, но в будущих реализациях он может вернуть 0-заполненный GUID?

В этом случае я придерживаюсь своего первого абзаца, беспокоюсьэто если это произойдет.На данный момент функция имеет четко определенное поведение, работайте с этим.Проверьте неинициализированные значения и все.Вы не можете догадаться, что Microsoft сделает в будущем (черт, иногда даже Microsoft не может).

2 голосов
/ 21 декабря 2010

Хорошо, давайте посмотрим ... вы вызываете UuidCreate, не имея возможности указать конкретную версию GUID, и ожидаете получить определенную версию взамен? Как это хорошая идея?

Если вы пытаетесь сделать свое программное обеспечение «более надежным», как насчет инициализации переменных и проверки на ошибки?

GUID guid = {0};
if (SUCCEEDED(UuidCreate( &guid ) ) {
    // you can be _pretty_ sure guid has some valid stuff in it
}
...