Правило PC-lint / Flexelint против простого символа

У PC-lint и Flexelint Gimpel Software есть правило «971: Использование« char »без« подписано »или« без знака »», запрещающее использование равнины char Тип без указания подписи.

http://www.gimpel.com/html/pub/msg.txt

Я думаю, что это неправильно. Если char используется как целочисленный тип, тогда имеет смысл явно указывать подпись, но не тогда, когда он используется для текстовых символов. Стандартные библиотечные функции, такие как printf указатели на равнину charи используя signed или же unsigned char несоответствие типов Можно, конечно, использовать разные типы, но это может привести к ошибкам, которые пытается предотвратить Линт.

Это правило Линт против равнины char неверный тип?

0

Решение

Сообщения, которые PC Lint предоставляет в диапазоне 900-999 (и 1900-1999 для C ++), называются «Выборные заметки» и по умолчанию отключены. Они предназначены для использования, если у вас есть руководящие указания по кодированию, которые ограничивают каким-то конкретным образом. Затем вы можете активировать одну или несколько из этих заметок, чтобы помочь вам найти потенциальные нарушения. Я не думаю, что кто-то активировал все сообщения 9xx в реальных усилиях по разработке.

Вы правы насчет char: Это использование байта (почти всегда) для реального символа. Тем не менее, char обрабатывается компилятором C как со знаком или без знака. Для C ++ char отличается от обоих unsigned char и из signed char,

Во многих встроенных средах C, в которых я работал, было принято иметь правило кодирования, утверждающее, что char не допускается. Именно тогда это сообщение ПК Lint должно быть активировано. Исключения, как и в случае взаимодействия с другими библиотеками, должны были быть явно разрешены, а затем использовать комментарий Lint для подавления отдельного сообщения.

3

Другие решения

Я бы предположил причину, по которой они решили заставить вас выбрать signed или же unsigned потому что стандарт C не делает. Стандарт C утверждает char, unsigned char, а также signed char три уникальных типа.

GCC, например, делает по умолчанию signed но это можно изменить с помощью флага -funsigned-char

Итак, IMO, я бы сказал, нет, правило против этого не неправильно, оно просто пытается ужесточить спецификацию C.

0

По вопросам рекламы [email protected]