How to remove incorrect warning?
-
Or what should i do with such blocks which have alot of binary operations(all of them are correct and works exactly as they should). On screen array of unsigned chars:
-
In new version 5.12 appears much better warning functionality, but how can i remove particular warnings which inappropriate? I fixed all the warnings, but last one i can't fix because it in WinAPI libraries:
@Engelard said in How to remove incorrect warning?:
I fixed all the warnings
👍
last one i can't fix because it in WinAPI libraries:
Yes, this warning is caused by
winnt.h
so you can't fix that one.Or this one. arg1 - is digital number from user which i should convert to single byte(unsigned char), toUint is exactly what i needed, to uChar does'nt exist, but it gives me that warning..
...
Or what should i do with such blocks which have alot of binary operations(all of them are correct and works exactly as they should). On screen array of unsigned chars:
These warn you about implicit conversion. To remove the warning, use
static_cast<>
to do explicit conversion.In new version 5.12 appears much better warning functionality,
The new features are part of the Clang Code Model: https://blog.qt.io/blog/2018/06/05/qt-creators-clang-code-model/
how can i remove particular warnings which inappropriate?
https://stackoverflow.com/questions/51612041/disable-a-specific-warning-in-qtcreator
-
@Engelard These are not incorrect warnings.
You should fix the issues in your code instead of suppressing warnings.
If you're converting, for example, int to char you should do it explicitly and think about possible issues. -
@Engelard said in How to remove incorrect warning?:
I fixed all the warnings
👍
last one i can't fix because it in WinAPI libraries:
Yes, this warning is caused by
winnt.h
so you can't fix that one.Or this one. arg1 - is digital number from user which i should convert to single byte(unsigned char), toUint is exactly what i needed, to uChar does'nt exist, but it gives me that warning..
...
Or what should i do with such blocks which have alot of binary operations(all of them are correct and works exactly as they should). On screen array of unsigned chars:
These warn you about implicit conversion. To remove the warning, use
static_cast<>
to do explicit conversion.In new version 5.12 appears much better warning functionality,
The new features are part of the Clang Code Model: https://blog.qt.io/blog/2018/06/05/qt-creators-clang-code-model/
how can i remove particular warnings which inappropriate?
https://stackoverflow.com/questions/51612041/disable-a-specific-warning-in-qtcreator
@JKSH said in How to remove incorrect warning?:
https://stackoverflow.com/questions/51612041/disable-a-specific-warning-in-qtcreator
Tnx. But it will remove not particular warning(like first which from WINAPI), but whole kind - use of old-style cast which i don't want to, that warning is useful, and it not worthing remove all of them just because of single mistake of QCreator.
Topic still actual.
-
@JKSH said in How to remove incorrect warning?:
https://stackoverflow.com/questions/51612041/disable-a-specific-warning-in-qtcreator
Tnx. But it will remove not particular warning(like first which from WINAPI), but whole kind - use of old-style cast which i don't want to, that warning is useful, and it not worthing remove all of them just because of single mistake of QCreator.
Topic still actual.
@Engelard said in How to remove incorrect warning?:
@JKSH said in How to remove incorrect warning?:
https://stackoverflow.com/questions/51612041/disable-a-specific-warning-in-qtcreator
Tnx. But it will remove not particular warning(like first which from WINAPI), but whole kind - use of old-style cast which i don't want to, that warning is useful, and it not worthing remove all of them just because of single mistake of QCreator.
Topic still actual.
Why is this a mistake or error of Qt creator?
Is the warning completely wrong or is it because of an include, which is not part of Qt?
-
@Engelard said in How to remove incorrect warning?:
@JKSH said in How to remove incorrect warning?:
https://stackoverflow.com/questions/51612041/disable-a-specific-warning-in-qtcreator
Tnx. But it will remove not particular warning(like first which from WINAPI), but whole kind - use of old-style cast which i don't want to, that warning is useful, and it not worthing remove all of them just because of single mistake of QCreator.
Topic still actual.
Why is this a mistake or error of Qt creator?
Is the warning completely wrong or is it because of an include, which is not part of Qt?
-
@koahnig said in How to remove incorrect warning?:
Is the warning completely wrong or is it because of an include, which is not part of Qt?
Probably because not part of my project i'd say. Warning which user can't fix is wrong warning.
-
@Engelard are you sure the warning doesn't come from your code, where you compare
LPDWORD
withLPCVOID
that seems like an implicit - presumably oldstyle - cast so that a comparison can happen.@J.Hilk Nope, changed conversion type after your post, still same warn, at least because underscored with yellow exactly WINapi keyword(take a look at screenshot). Plus - it tells that warning exactly because of keyword STILL_ACTIVE
@JKSH said in How to remove incorrect warning?:
https://stackoverflow.com/questions/51612041/disable-a-specific-warning-in-qtcreator
I can't get it, how to remove even whole kind of warnings? For example i want remove "warning: implicit conversion changes signedness:" But can't find anywhere proper code for it. Searched in docs, found macro like -Wpointer-sign (C and Objective-C only) But it seems not working, or it's just macro for another warning type, not for my.
-
I noticed that hint(right-top corner) -Wsign-conversion , added it to my Code Model, but error still exist... what am i doing wrong?
-
@koahnig That is it!. Tnx. only one thing left - individually handle that warning from WINAPI...
-
It is obvious IMHO that you have to add a "no-" for warnings you do not like from code model as it is -Wsign-conversion.
-
Your code is wrong, so that warning is very useful in fact.
if (exitCode != reinterpret_cast<LPCVOID>(...))
is nonsense. You can't (or rather shouldn't) cast integers to
const void *
...
What you should do instead is something like this:if (*exitCode != STILL_ACTIVE) { /* do something */ }
reinterpret_cast
is the one sure way to blow your leg off while trying to shoot yourself in the foot. -
I can guarantee you you're never going to enter that branch. You're playing with fire. See my previous comment.
-
Your code is wrong, so that warning is very useful in fact.
if (exitCode != reinterpret_cast<LPCVOID>(...))
is nonsense. You can't (or rather shouldn't) cast integers to
const void *
...
What you should do instead is something like this:if (*exitCode != STILL_ACTIVE) { /* do something */ }
reinterpret_cast
is the one sure way to blow your leg off while trying to shoot yourself in the foot.@kshegunov said in How to remove incorrect warning?:
What you should do instead is something like this:
if (exitCode != STILL_ACTIVE) { / do something */ }Nope
Will be more warnings(first one actually, no matter what code you'll make, it screaming because of definition inside windows libraries). Your proposal:
-
@kshegunov said in How to remove incorrect warning?:
What you should do instead is something like this:
if (exitCode != STILL_ACTIVE) { / do something */ }Nope
Will be more warnings(first one actually, no matter what code you'll make, it screaming because of definition inside windows libraries). Your proposal:
Don't make me smack you; I've been doing programming all my life.
Firstly, the warning is the least of your problems. You're giving a pointer to uninitialized memory block (i.e.
null
) as an output parameter. Then you're casting an integer to a memory address?
How it works is as follows:DWORD exitCode; GetExitProces(..., &exitCode); if (exitCode != STILL_ACTIVE) { /* blabla */ }
If the warning is the only thing that bothers you, then cast the macro to the proper type explicitly:
if (exitCode != static_cast<DWORD>(STILL_ACTIVE)) { /* more blabla */ }
-
Don't make me smack you; I've been doing programming all my life.
Firstly, the warning is the least of your problems. You're giving a pointer to uninitialized memory block (i.e.
null
) as an output parameter. Then you're casting an integer to a memory address?
How it works is as follows:DWORD exitCode; GetExitProces(..., &exitCode); if (exitCode != STILL_ACTIVE) { /* blabla */ }
If the warning is the only thing that bothers you, then cast the macro to the proper type explicitly:
if (exitCode != static_cast<DWORD>(STILL_ACTIVE)) { /* more blabla */ }
@kshegunov said in How to remove incorrect warning?:
If the warning is the only thing that bothers you, then cast the macro to the proper type explicitly:
if (exitCode != static_cast<DWORD>(STILL_ACTIVE)) { /* more blabla */ }- For last time. Yes, it's just was almost hundred in my app, now 0(if not mention that with STILL_ACTIVE).
- Your new example of static cast doing nothing, because in definition in win's.h it is already DWORD: