GCC - разве предупреждение не должно быть выдано при присвоении интервала символу?

Легкий вес, может быть выполнен, не устанавливая его на машине клиента, быстро, может отладить привилегированный режим.

7
задан Ciro Santilli 新疆改造中心法轮功六四事件 9 October 2018 в 20:43
поделиться

6 ответов

Вы ищете

-Wconversion

. Вам нужно спросить разработчика gcc о конкретных причинах, по которым некоторые предупреждения не отображаются. t включены в -Wall или -Wextra .

Во всяком случае, я использую следующие флаги:

-Wall -Wextra -Wmissing-prototypes -Wmissing-declarations -Wshadow
-Wpointer-arith -Wcast-align -Wwrite-strings -Wredundant-decls -Wnested-externs
-Winline -Wno-long-long -Wconversion -Wstrict-prototypes

Как указывали другие,

9
ответ дан 6 December 2019 в 12:52
поделиться

Я не получал предупреждения / ошибки и при использовании -Wconversion . Однако, если вы пропустите что-то вроде splint , вы получите три предупреждения:

file.c: (in function main)
file.c:9:5: Assignment of int to char: c = i_max
  To make char and int types equivalent, use +charint.
file.c:10:52: Format argument 2 to printf (%d) expects int gets char: c_max
   file.c:10:32: Corresponding format code
file.c:10:59: Format argument 3 to printf (%d) expects int gets char: c
   file.c:10:39: Corresponding format code

Finished checking --- 3 code warnings

Если вы серьезно относитесь к обнаружению всех ошибок, вам следует использовать более одного инструмента.

2
ответ дан 6 December 2019 в 12:52
поделиться

В вашем вопросе есть небольшой нюанс, который мне не сразу очевиден из-за того, как он сформулирован.

Если вы думаете, что GCC ( в частности, GCC) должен выдать предупреждение здесь, тогда некоторые параметры компилятора могут помочь (см. другие ответы).

Если вы считаете, что любой компилятор должен выдавать предупреждение здесь (и я, кажется, прочитал это мнение в ваш вопрос), то ... ну, "предупреждения" никоим образом не являются обязательными и даже де-факто унифицированными. Здесь нет «следует».

2
ответ дан 6 December 2019 в 12:52
поделиться

-Wall не совсем означает -Wall , -Wextra уже подвергается критике за то, что слишком педантичен.

Как сказал Кристоф, вы ищете -Wconversion. Хорошо разобраться в том, что на самом деле включают -Wall и -Wextra, и просто указать флаги -W, которые вы хотите использовать в вашем файле make, особенно если рассматривать предупреждения как ошибки.

2
ответ дан 6 December 2019 в 12:52
поделиться

I think it falls under the "Usual arithmetic conversions" (6.3.1.8) or "integer promotion rules" (5.1.2.3 (?)), but I can't find the specific text that says the behaviour you're seeing is expected.

0
ответ дан 6 December 2019 в 12:52
поделиться

In C, assigning an int to a char is legal.

As it's legal (but possibly dodgy) the different compiler vendors do different things when they encounter this code.

I guess MS is just being extra pedantic while the GCC guys have decided that it's not even worth a warning.

1
ответ дан 6 December 2019 в 12:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: