лучший способ гарантировать ASCII как во время компиляции, так и во время выполнения?
Похоже, что OP хочет знать, как обнаружить набор символов выполнения кодирование и кодирование ввода / вывода пользователя.
Во время компиляции или во время выполнения, чтобы обнаружить ASCII, используйте серию _Static_asserts
или asserts
(пример кода) для большинства из 128 ASCII символов, которые входят в набор C language исполнительных символов . C11 §5.2.1 3
A to Z
a to z
0 to 9
! " # % & ’ ( ) * + , - . / : ; < = > ? [ \ ] ^ _ { | } ~
space character,
and control characters representing horizontal tab, vertical tab, and form feed.
some way of indicating the end of each line of text
Обратите внимание, что такие символы, как "$, @,` ", не являются частью набора символов выполнения so", если нет соответствующего члена, он преобразуется в определяемый реализацией элемент, отличный от нулевого (широкого) символа ".
Чтобы обнаружить кодирование ввода / вывода пользователя, я не вижу решения, кроме как попросить пользователя ввести справочный текст и код, проверяющий его.