Как подавить предупреждение Solaris lint в C в коде

Мне нужно иметь возможность подавлять предупреждения lint в определенных строках кода C, и я хотел бы сделать это с помощью встроенных директив. Это для очень большой части устаревшего кода, который я переношу на 64-битную версию, и я бы предпочел поместить директивы в код, а не в Makefile, который запускает lint, поскольку последний довольно неясен.

Проблема в том, что в документации Solaris lint указано, как это сделать только для нескольких типов предупреждений (насколько я могу судить).

В прошлом использовалась следующая форма, и документация Solaris предполагает, что это все еще разрешено, но, похоже, это не работает. Проблема усложняется тем, что lint Solaris не дает номеров ошибок, а использует идентификаторы, такие как E_CAST_INT_TO_SMALL_INT.

Вот старый способ (и их уже много в коде):

/*line -e511*/

person John Moore    schedule 22.07.2015    source источник
comment
Вы пробовали /*line -eE_CAST_INT_TO_SMALL_INT */, просто подставив идентификатор вместо номера ошибки?   -  person Andy Lester    schedule 22.07.2015
comment
Интересно, должен ли OP подавлять эти предупреждения. Может быть, опубликовать пример кода с предупреждением, которое OP хотел бы подавить?   -  person chux - Reinstate Monica    schedule 22.07.2015
comment
@chux - Согласен. При переносе старого кода на 64-разрядную версию я думаю, что предупреждения lint, такие как E_CAST_INT_TO_SMALL_INT, являются именно теми проблемами, которые должны устраняться, особенно если они связаны с size_t и/или кодом указателя, написанным кем-то, кто знает, что size_t является целым числом без знака. Здесь это звучит слишком вероятно.   -  person Andrew Henle    schedule 23.07.2015
comment
Я никогда раньше не видел формы /* line -e511 */ с ворсом Solaris. Вы уверены, что они не предназначены для другого ворса?   -  person alanc    schedule 23.07.2015
comment
Я попробовал /*lint -e... и это не сработало. В существующем коде было несколько строк такой формы из древней истории, когда /*lint -e‹number›*/ работало. Я подавляю предупреждения, потому что конкретный фрагмент кода не столкнется со случаем, когда требуется более 32, но является частью огромной базы кода, где не стоит переписывать тонны кода (потенциально добавляя ошибки), чтобы сделать это предупреждение уходит естественным путем.   -  person John Moore    schedule 23.07.2015
comment
Такие комментарии, как /* lint -e511 */, используются PC-Lint. Линты на основе AT&T использовали другие форматы.   -  person Mark Plotnick    schedule 23.07.2015


Ответы (1)


Описано в разделе о директивах Lint по этой ссылке

Есть два встроенных способа подавить предупреждения lint для одной строки кода — старый способ и рекомендуемый новый способ.

Старый способ — использовать комментарий LINTED: /*LINTED*/

Новый способ — использовать макрос lint: NOTE(LINTED (msg))

Новый способ также требует включения note.h.

person John Moore    schedule 22.07.2015