про статические проверки

Jan 31, 2014 9 Replies

Привет, All !


А какие есть проверяльщики кода, которые аккуратно ругнутся на потерю точности при присваиваниях или при неявном приведении 'простых' типов в выражениях? gcc/g++ при самых жестких настройках проверяет только сравнение знакового с беззнаковым.



примеры плохого кода:



char foo( int a, int b) { return a+b; // int урезается до char }



unsigned int bar1(int a, int b) { return a+b; // знаковое урезается до беззнакового. при отрицательном будут проблемы }



long long bar3(int a, int b) { return a+b; // возможна потеря точности }



. С уважением, Hикита. icq:240059686, lj-user:nicka_startcev ... Они таки говорят на языке Б-га! на англицком!


Hello, Nickita! You wrote to All on Fri, 31 Jan 2014 21:22:50 +0400:

NAS> unsigned int bar1(int a, int b) NAS> { NAS> return a+b; // знаковое урезается до беззнакового. при NAS> отрицательном будут проблемы }

В каком смысле урезается? Разве операция сложения чем-то отличается для знакового и беззнкового?

dima

formatting link

-Wconversion -Wdouble-promotion -Wfloat-equal -Wignored-qualifiers

-Wno-pointer-to-int-cast -Wreturn-type -Wsign-compare -Wsign-conversion

Alexey V. Vissarionov aka Gremlin from Kremlin

-Wall This enables all the warnings about constructions that some users consider questionable, and that are easy to avoid (or modify to prevent the warning), even in conjunction with macros. This also enables some language-specific warnings described in C++ Dialect Options and Objective-C and Objective-C++ Dialect Options.

-Wall turns on the following warning flags:

-Waddress -Warray-bounds (only with -O2) -Wc++0x-compat -Wchar-subscripts -Wenum-compare (in C/Objc; this is on by default in C++) -Wimplicit-int (C and Objective-C only) -Wimplicit-function-declaration (C and Objective-C only) -Wcomment -Wformat -Wmain (only for C/ObjC and unless -ffreestanding) -Wmissing-braces -Wnonnull -Wparentheses -Wpointer-sign -Wreorder -Wreturn-type -Wsequence-point -Wsign-compare (only in C++) -Wstrict-aliasing -Wstrict-overflow=1 -Wswitch -Wtrigraphs -Wuninitialized -Wunknown-pragmas -Wunused-function -Wunused-label -Wunused-value -Wunused-variable -Wvolatile-register-var

Note that some warning flags are not implied by -Wall. Some of them warn about constructions that users generally do not consider questionable, but which occasionally you might wish to check for; others warn about constructions that are necessary or hard to avoid in some cases, and there is no simple way to modify the code to suppress the warning. Some of them are enabled by -Wextra but many of them must be enabled individually. ^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Alexey V. Vissarionov aka Gremlin from Kremlin
01 Feb 14 11:04, you wrote to Nickita A Startcev:

Привет!

01 Feb 14 12:34, you wrote to me:

AV> Some of them are enabled by -Wextra but many of them must AV> be enabled individually.

Вот это идиотизм, однозначно.

Всего доброго! Евгений Музыченко snipped-for-privacy@muzy-chen-ko.net (все дефисы убрать)

Привет, Alexey !

01 Feb 14 , 11:04 Alexey Vissarionov писал к Nickita A Startcev:

NS>> А какие есть проверяльщики кода, которые аккуратно ругнутся на NS>> потерю точности при присваиваниях или при неявном приведении NS>> 'простых' типов в выражениях? gcc/g++ при самых жестких NS>> настройках проверяет только сравнение знакового с беззнаковым.

AV> ЩИТО?!

банальное "недоосилил документацию, решил, что -W -Wall хватит". а вообще, это странная идея, считать что "all" - это не всё. кстати, -Weverything -- тоже не всё, или сегодня всё а в соседней минорной версии станет не всё, и появится -Wall-very-very-everything?

AV> -Wconversion -Wdouble-promotion -Wfloat-equal -Wignored-qualifiers AV> -Wno-pointer-to-int-cast -Wreturn-type -Wsign-compare AV> -Wsign-conversion

AV> В порядке ликбеза: -Wall включает не все эти проверки.

дурное именование ключа, да.

. С уважением, Hикита. icq:240059686, lj-user:nicka_startcev ... должность придворного бушмейстера не занимал

Привет, Michael !

02 Feb 14 , 01:15 Michael Belousoff писал к Nickita A Startcev:

AV>>> В порядке ликбеза: -Wall включает не все эти проверки.

NS>> дурное именование ключа, да.

MB> -Wall: "убейся апстену!"

ага. 'ключ компилятора "-Стена"'

. С уважением, Hикита. icq:240059686, lj-user:nicka_startcev ... "кАнтора Государственной Безопасности"

Привет, Nickita.

Вот что Nickita A Startcev wrote to Alexey Vissarionov:

NS> 01 Feb 14 , 11:04 Alexey Vissarionov писал к Nickita A Startcev:

NS>>> А какие есть проверяльщики кода, которые аккуратно ругнутся на NS>>> потерю точности при присваиваниях или при неявном приведении NS>>> 'простых' типов в выражениях? gcc/g++ при самых жестких NS>>> настройках проверяет только сравнение знакового с беззнаковым.

AV>> ЩИТО?!

NS> банальное "недоосилил документацию, решил, что -W -Wall хватит". NS> а вообще, это странная идея, считать что "all" - это не всё. NS> кстати, -Weverything -- тоже не всё, или сегодня всё а в соседней NS> минорной версии станет не всё, и появится -Wall-very-very-everything?

AV>> -Wconversion -Wdouble-promotion -Wfloat-equal -Wignored-qualifiers AV>> -Wno-pointer-to-int-cast -Wreturn-type -Wsign-compare AV>> -Wsign-conversion

AV>> В порядке ликбеза: -Wall включает не все эти проверки.

NS> дурное именование ключа, да.

-Wall: "убейся апстену!"

--Michael G. Belousoff-- Yekaterinburg city mickbell(dog)mail(dot)ru

... ==== Проблему надо решать до того, как она появится. ====

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required