Como ter o Xcode 3.1 do compilador alertam para operador de atribuição em uma instrução if?
-
05-07-2019 - |
Pergunta
Eu tentei pesquisar a documentação ea internet tão bem como eu sou capaz, mas eu não tenho sido capaz de obter o compilador Xcode para emitir um aviso se o operador de atribuição é usado em uma instrução if.
Eu estou vindo RealBasic, onde eu tenho um extremamente forte hábito de escrever este tipo de comparação:
if x = 5 then ...
Em C, é claro, que atribui sintaxe x o valor de 5, em seguida, testa o resultado para ver se é diferente de zero, eo operador "correta" é:
if (x == 5) { ... }
Eu encontrei várias menções que o compilador deve ser capaz de avisar se houver cessão feita em um caso de comparação, mas eu não consigo encontrar como para ligá-lo no Xcode 3.1 / gcc. Eu encontrei a opção -pedantic
, mas que não parecem gerar o aviso.
Uma vez que eu passei uma quantidade razoável de tempo duas vezes agora rastrear bugs que acabou por ser "=" em vez de "==", eu gostaria da ajuda de um aviso.
Eu sei que eu posso fazer isso em vez (que fará com que um erro do compilador):
if (5 = x) { ... }
... mas que exige mudança de hábitos de codificação enraizados também. Sem mencionar que parece desajeitada e para trás.
Obrigado!
Solução 2
O link na resposta de ennuikiller levou a que eu precisava.
Aqui está um pouco mais de informações para qualquer pessoa que possa encontrar isso no futuro:
-
O aviso do compilador é "Missing chaves e parênteses", ou -Wparentheses.
-
O alerta está ligado, escolhendo Get Info para a corrente -alvo no Xcode.
-
Como eu finalmente descobri, o iPhone Simulator SDK faz não Mostrar esta opção de compilador.
-
Mudar o SDK para iPhone dispositivo apresentará o GCC 4.2 Advertências seção, que inclui "Faltando chaves e parênteses".
-
Depois de ligar essa opção no SDK de dispositivos iPhone, a mudança de volta para os programas que um Similator configuração construção "User-Defined" tem sido acrescentou:
GCC_WARN_MISSING_PARENTHESES
= "SIM". -
Se uma atribuição é realmente desejado em uma instrução if, você pode dobrar os parênteses para evitar o aviso.
(duas vezes parênteses exemplo:)
if ((x = 5)) { ... }
O alerta funciona como um encanto, embora ele faz não gostar da Apple padrão:
if (self = [super init]) { ... }
Eu provavelmente vou deixar aqueles em que se encontra, embora se eu acabar com uma enorme quantidade deles em um projeto, eu vou quer dobrar o parêntese ou quebrar a atribuição em uma linha separada.
Obrigado!
Outras dicas
Você está procurando a opção -Wall eu acho.
int main(void) {
int x = 5;
if ( x=5) {
}
return 0;
}
$ g++ -pedantic x.cc
$ g++ -Wall x.cc
x.cc: In function ‘int main()’:
x.cc:7: warning: suggest parentheses around assignment used as truth value
Este ligação descreve como ativar as opções através do Xcode GUI