C language refactor tool

Vse o programih, ki jih uporabljate

Moderator: Kroko

C language refactor tool

OdgovorNapisal/-a tilz0R » 05 Jun 2019, 06:06

Iščem code refactor tool za C jezik, ki je sposoben zaznati primerjavo spremenljivke/funkcije z konstantno in le-to primerjavo zamenjati z konstanto proti spremenljivki/funkciji. Spodaj primer.

Nekaj konstant:
Koda: Izberi vse
//Enumeracija
typedef enum {
    r_OK, r_ERR
} r_t;

//Makroji
#define VAL_MAX        0xFFFFFF


Primer kode, ki bi jo refactor moral zaznati:
Koda: Izberi vse
r_t res;
...

if (res == r_OK)  //Primerjava s konstanto enumeracije
if (res == function_returns_r_ERR())  //Primerjava s funkcijo, ki vrne konstanto
if (abc == VAL_MAX) //Primerjava s konstanto
if (ptr != NULL) //Primerjava s konstanto za pointer
if (ptr == NULL) //Primerjava pointer
if ((ptr = malloc(10) != NULL) //Najprej assignment, potem primerjava.


Zgornjo kodo bi rad obrnil, da izgleda tako:
Koda: Izberi vse
if (r_OK == res)  //Primerjava s konstanto enumeracije
if (function_returns_r_ERR() == res)  //Primerjava s funkcijo, ki vrne konstanto
if (VAL_MAX == abc) //Primerjava s konstanto
if (NULL != ptr) //Primerjava s konstanto za pointer
if (NULL == ptr) //Primerjava pointer
if (NULL != (ptr = malloc(10)) //Najprej assignment, potem primerjava.


S tem se izogneš assignment operacije, medtem, ko bi morala biti comparison. (= vs ==). Vem tudi, da prevajalnik vrne warning, če narediš if (a = 123) namesto if ((a = 123)).

Obstaja kakšen software za to, da bi to sam uspel popravit?
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1695
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 221 krat
Prejel zahvalo: 442 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Vrni se na Uporabniški programi

Kdo je na strani

Po forumu brska: rbogomir, sundancer in 1 gost