У PC-lint и Flexelint Gimpel Software есть правило «971: Использование« char »без« подписано »или« без знака »», запрещающее использование равнины char
Тип без указания подписи.
http://www.gimpel.com/html/pub/msg.txt
Я думаю, что это неправильно. Если char
используется как целочисленный тип, тогда имеет смысл явно указывать подпись, но не тогда, когда он используется для текстовых символов. Стандартные библиотечные функции, такие как printf
указатели на равнину char
и используя signed
или же unsigned char
несоответствие типов Можно, конечно, использовать разные типы, но это может привести к ошибкам, которые пытается предотвратить Линт.
Это правило Линт против равнины char
неверный тип?
Сообщения, которые PC Lint предоставляет в диапазоне 900-999 (и 1900-1999 для C ++), называются «Выборные заметки» и по умолчанию отключены. Они предназначены для использования, если у вас есть руководящие указания по кодированию, которые ограничивают каким-то конкретным образом. Затем вы можете активировать одну или несколько из этих заметок, чтобы помочь вам найти потенциальные нарушения. Я не думаю, что кто-то активировал все сообщения 9xx в реальных усилиях по разработке.
Вы правы насчет char
: Это использование байта (почти всегда) для реального символа. Тем не менее, char
обрабатывается компилятором C как со знаком или без знака. Для C ++ char
отличается от обоих unsigned char
и из signed char
,
Во многих встроенных средах C, в которых я работал, было принято иметь правило кодирования, утверждающее, что char
не допускается. Именно тогда это сообщение ПК Lint должно быть активировано. Исключения, как и в случае взаимодействия с другими библиотеками, должны были быть явно разрешены, а затем использовать комментарий Lint для подавления отдельного сообщения.
Я бы предположил причину, по которой они решили заставить вас выбрать signed
или же unsigned
потому что стандарт C не делает. Стандарт C утверждает char
, unsigned char
, а также signed char
три уникальных типа.
GCC, например, делает по умолчанию signed
но это можно изменить с помощью флага -funsigned-char
Итак, IMO, я бы сказал, нет, правило против этого не неправильно, оно просто пытается ужесточить спецификацию C.