Com Essas Flags nem precisa de Teste Unitário

🚀 A chance de seu software ter algum tipo de problema é quase zero.


Com Essas Flags nem precisa de Teste Unitário


Nós já publicamos uma vez sobre flags para GCC/Clang que fala sobre as flags fundamentais para construção de software que são:

g -Wpedantic -Wall -Werror -Wextra -fsanitize=address

No entanto, apesar delas já ajudarem bastante, você ainda pode melhorar seu código com Analisadores Estáticos e também flags para verificar conversões e entre outros posíveis bugs.

Um compilador ideal para isso é o clang++, pois exibe mais warnings que o g++.

Que são elas:

Recomendadas para debug:

-g -O0                         # Debug info + sem otimizações (mais legível)
-fno-omit-frame-pointer        # Melhor para stack traces e debuggers

Warnings úteis:

-Wconversion                   # Converte implícitos perigosos (int → float, etc)
-Wsign-conversion              # Converte entre signed/unsigned
-Wnull-dereference             # Detecta uso de ponteiros nulos
-Wdouble-promotion             # Detecta promoções implícitas para double
-Wformat=2                     # Verifica printf/scanf com mais rigor
-Wcast-align                   # Avisa casts com possível problema de alinhamento

Além de:

Sanitizers complementares:

-fsanitize=undefined           # UB: overflows, null deref, shift inválido, etc
-fsanitize=leak                # Detecta memory leaks

Além também da -Wshadow e da -Wfloat-conversion.

Obs: Use -O1 se quiser um pouco de otimização sem perder muito a clareza no debug.


Eu as utilizei em conjunto para debug a Terlang e após compilar com essas flags obtive diversos Warnings que foram transformados em erros, abaixo a imagem no momento da compilação:

alt text

Eu use o arquivo debug.ter e resolvi todos esses erros/Warnings de acordo com esse commit, mas nesse commit também há outras modificação e implementações adicionais.

Em resumo em criei um arqivo debug.ter com todas flags, ex.:

/*
  TER/TERLANG
  By: Marcos Oliveira
*/

// Defs
auto compiler = "clang++ -stdlib=libc++ -O0 -fno-omit-frame-pointer -Wfloat-conversion"
auto add_flags = "-Wsign-conversion -Wnull-dereference -Wdouble-promotion -Wformat=2 -Wcast-align -Wconversion"
auto sanitize = " -fsanitize=address -fsanitize=undefined -fsanitize=leak"
auto flags = "-g -Wall -Werror -Wextra -Wshadow -Wpedantic"
auto build = compiler + " " + add_flags + " " + sanitize + " " + " " + flags + " ./src/*.cpp"

// Display full command
output(build)
exec(build)

Então, quando estiver em modo desenvolvimento recomendo compilar com todas essa flags, no entanto, quando for para release o ideal é retirar todas, pois elas comprometem o desempenho e aumentam significamente o tamanho do binário.


cpp cppdaily linguagemc gcc clang compiladores


Compartilhe


Nosso canal no Youtube

Inscreva-se


Marcos Oliveira

Marcos Oliveira

Desenvolvedor de software
https://github.com/terroo


Crie Aplicativos Gráficos para Linux e Windows com C++

Aprenda C++ Moderno e crie Games, Programas CLI, GUI e TUI de forma fácil.

Saiba Mais

Receba as novidades no seu e-mail!

Após cadastro e confirmação do e-mail, enviaremos semanalmente resumos e também sempre que houver novidades por aqui para que você mantenha-se atualizado!