JavaScript is not currently enabled, but is required for full CodeSonar manual search and browse functionality.

If you are viewing this file in your hub's Web GUI, enable JavaScript in your browser: you will also need it for GUI functionality.

If you opened this file directly from disk, your browser may be directly suppressing JavaScript functionality: certain browsers perform this suppression on local files (but not files delivered by web servers) for security reasons.

CodeSonar® 9.2p0 CONFIDENTIAL CodeSecure Inc
C and C++


LANG.CAST.CSTYLE : C-style Cast

Summary

[C++ only]

One of the following cast mechanisms is used in C++ code.

Warnings of this class will not be triggered for single-argument constructor calls, even if the constructor is not marked explicit. This may change in a future release.

Properties

Class Name C-style Cast
Significance style
Mnemonic LANG.CAST.CSTYLE
Categories
AUTOSARC++14 AUTOSARC++14:A5-2-2 Traditional C-style casts shall not be used.
MisraC++2008 MisraC++2008:5-2-4 C-style casts (other than void casts) and functional notation casts (other than explicit constructor calls) shall not be used.
MisraC++2023 MisraC++2023:8.2.2 C-style casts and functional notation casts shall not be used
JSF++ JSF++:183 Every possible measure should be taken to avoid type casting.
  JSF++:185 C++ style casts (const_cast, reinterpret_cast, and static_cast) shall be used instead of the traditional C-style casts.
Availability Available for C++ only (not C).
Enabling Checks for this warning class are disabled by default, and require the unnormalized C ASTs for the project. To enable them, add the following WARNING_FILTER rule and RETAIN_UNNORMALIZED_C_AST specification to the project configuration file.
RETAIN_UNNORMALIZED_C_AST = Yes
WARNING_FILTER += allow class="C-style Cast"
Note that retaining the unnormalized ASTs will increase the disk space used to store the project representation, and may make the analysis take longer.

Example

// LANG.CAST.CSTYLE.cpp

int f_c_cast(short s){
    return (int) s;              // 'C-style Cast' warning issued here: C-style cast
}

int f_functional_cast(short s){
    return int(s);               // 'C-style Cast' warning issued here: functional notation cast
}

void f_void_cast(void){
  short s = 5;                                    // ok: not a cast
  (void) f_functional_cast(s);                    // ok: C-style cast to void
}

int* f_const_cast(const int *s){
    return const_cast<int*>(s);                    // ok: C++-style cast
}

class MyBase { int a; };
class MyDerived : public MyBase {int b; };

MyBase* f_dynamic_cast(MyDerived *d){
    return dynamic_cast<MyBase*>(d);              // ok: C++-style cast
}

MyBase* f_static_cast(MyDerived *d){
    return static_cast<MyBase*>(d);               // ok: C++-style cast
}
 
MyBase* f_reinterpret_cast(int i){
    return reinterpret_cast<MyBase*>(i);          // ok: C++-style cast
}

Relevant Configuration File Parameters

The following configuration file parameters affect checks for this warning class.

 

To report problems with this documentation, please visit https://support.codesecure.com/.