Я использую PC-Lint 8.00x со следующими параметрами:
+v -wlib(1) +fan +fas
Я получаю ряд сообщений об ошибках от PC-Lint, когда запускаю код, подобный следующему:
typedef union
{
struct
{
unsigned int a : 4;
unsigned int b : 4;
unsigned int c : 4;
unsigned int d : 4;
} bits;
unsigned short value;
} My_Value;
int main (void)
{
My_Value test[] =
{
{
.bits.a = 2,
.bits.b = 3, //Errors 133 and 10
.bits.c = 2,
.bits.d = 3,
},
{
.bits.a = 1,
.bits.b = 1, //Errors 133 and 10
.bits.c = 1,
.bits.d = 0,
},
};
/* Do something meaningful. */
return 0;
}
Сообщаемые ошибки определяются PC-Lint следующим образом:
Ошибка 133: Слишком много инициализаторов для агрегата "неизвестное имя"
Ошибка 10: Ожидание '}'
Я пробовал искать в Gimpel и выполнял поиск в Google, но не нашел ничего полезного. Код работает по назначению, и все инициализируется правильно. Вот мои вопросы.
<сильный>1. Поддерживает ли PC-Lint 8.00x инициализацию членов структуры в стиле C99?
<сильный>2. Если да, то какие параметры/флаги мне нужно установить для PC-Lint, чтобы глобально подавлять эти сообщения?
EDIT
Я должен был быть более подробным в отношении вопроса 2. Я хотел бы глобально подавить эти сообщения в отношении моего использования назначенных инициализаторов, как показано выше. Я не могу подавить их глобально для всех ситуаций, так как эти ошибки могут обнаруживать настоящие ошибки в коде.
.bits.a
) в порядке. Я подозреваю, что вам нужно сделать, например.My_value test[] = { { { .a = 2, .b = 3, .c = 2, .d = 3 } }, ... }
. - person Some programmer dude   schedule 03.04.2014.bits.a
квалифицирует (и gcc, и clang принимают его). Но что произойдет, если вы переместите.bits
на уровень выше? - person Keith Thompson   schedule 10.07.2014[0].bits.a = 1
и продолжу через[1].bits.d = 0
, PC-Lint больше не будет жаловаться, и armcc по-прежнему правильно компилирует его. Это может быть мой лучший вариант. - person embedded_guy   schedule 10.07.2014