В K & R ANSI C единственные места, где вопросительный знак может иметь место:
- Строковые литералы ""
- Символьные константы ''
- Комментарии
Теперь вы можете заметить, что в этом списке отсутствуют макросы и последовательности триграфов.
Я не включил последовательности триграфов, поскольку они являются расширением компилятора, а не "допустимым C".Я не имею в виду, что вы должны удалить чек из вашей программы, я пытаюсь сказать, что вы уже пошли дальше, чем нужно для ANSI C.
Я также не включил макросы, потому что когда вы говоритео символе, который может встречаться в макросах, вы можете иметь в виду две вещи:
- Имена / идентификаторы макросов
- Тела макросов
The?символ не может встречаться в идентификаторах макросов (/309364/kakovy-dopustimye-simvoly-dlya-imen-makrosov),, и я вижу тела макросов как обычный код C, поэтому первый список (строковые литералы, символьные константы и комментарии *) также должен охватывать их.
* Могут ли макросы корректно содержатькомментарии? Потому что, если я использую это:
#define somemacro 15 // this is a comment
, тогда // this is a comment
не является частью макроса. Но что если я скомпилирую этот C-файл с -D somemacro="15 // this is a comment"
?