O trecho a seguir gera erros de compilação ao adicionar -pedantic
e -Werror
em compiladores um pouco antigos.
#include <cstdint>
#include <iostream>
int add(int a, int b){
return a + b;
}; // <-- stray semicolon
int main (){
return 0;
}
No entanto, isso não acontece nas versões mais recentes do compilador. Encontre uma matriz de gcc
(10.x, 11.x) e clang
(5.x, 6.x) demonstrando a diferença em https://godbolt.org/z/KWeb8WTxz .
Tenho duas partes na minha pergunta:
- Por que isso não é acionado em compiladores recentes?
- É possível ativar o comportamento antigo em versões recentes do
clang
ougcc
?
A partir do C++ 11, pontos e vírgulas extras
;
(também conhecidos como declarações vazias ) em nível global são válidos. Acredito que isso seja ocasionalmente útil para escrever macros.Como tal, o GCC 11 removeu
-pedantic
o diagnóstico por um valor extra;
quando-std=c++11
ou mais tarde for usado. Ver:Você pode restaurar o comportamento antigo usando um padrão C++ anterior ao C++ 11. Tanto o GCC 11 quanto o clang 6 emitirão os diagnósticos antigos se você passar
-std=c++03
.