Как наилучшим образом установить значение Sentinel, когда возможен полный диапазон ввода? - PullRequest
1 голос
/ 20 июня 2019

При разборе файла мне нужно определить, обработан ли уже элемент с минимальным и максимальным вхождением 1. Позже при проверке мне нужно определить, не было ли оно вообще обработано.

Я могу сделать это не элегантно с помощью переменной count, которая увеличивается каждый раз, но это громоздко и не элегантно. Возможно, логический флаг. В общем, я бы использовал некоторую форму значения Sentinel, например, NULL для указателя или «» для статически размещенного массива строк. Или memset () ноль для многих элементов.

Проблема в том, что если полный диапазон типов данных является потенциально допустимым входным сигналом, он становится очень запутанным, пытаясь сделать Страж.

Если он подписан и используются только положительные числа, Страж может быть любым отрицательным числом. Если тип данных не имеет знака, но значения, в которых используется бит знака, не используются, можно использовать отрицательное число.

Если для хранения значения можно использовать больший тип данных, то для SV можно использовать добавленный диапазон. Хотя это может повлиять на совместимость типов, усечение, продвижение.

В перечисление я могу добавить запись, создав SV.

Трудно отслеживать все способы отображения для каждого элемента структуры, была ли она инициализирована или нет.

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

if (age) print («Age - допустимая переменная со значением:% d», * age);

Изменить для уточнения вопроса (без изменений выше):

Я анализирую журналы из другого приложения (нет документации по формату). Записи журнала включают структуры данных / объекты , и в файлах также есть небольшие спонтанно поврежденные записи, потому что другой поток иногда пишет в них без синхронизации доступа .

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

Для меня может быть проще определить все как массив со связанной переменной счетчика.

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

Следующий этап - проверка ввода - еще сложнее.

1 Ответ

0 голосов
/ 20 июня 2019

Проблема в том, что если полный диапазон типов данных является потенциально допустимым входным сигналом, он становится очень запутанным, пытаясь создать Страж. <</p>

Я бы сказал, что если это так,нет никакого способа сделать часового.Вам может повезти, если у рассматриваемого типа данных есть представление ловушек (что, по сути, означает, что есть некоторые битовые шаблоны, которые вы можете сохранить в типе данных, но которые нельзя интерпретировать как значение в типе данных), которые вы могли бы(ab) use.

Кроме этого, я думаю, что вам нужно прибегнуть к какому-то второстепенному способу (переменной) для достижения своей цели.

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

Подумайтеиз массива значений типа double: вы можете использовать значение PI до 30 значащих цифр, если маловероятно, что вы когда-нибудь встретите это число в качестве действительного ввода, скажем, в бухгалтерском программном обеспечении.Но вам все равно понадобится некоторый обработчик для значения часового, чтобы определить, действительно ли оно является часовым или действительно верным, но маловероятным.

...