Pergunta

Você sabe como posso fazer uma tala ignorar onde eu me declarar variáveis?

Eu sei que a velha escola c diz-lhe para declarar variáveis de direito no início de cada função, mas como eu sou uma pessoa má eu gostaria de declarar as coisas perto de onde eu usá-los.Um bom exemplo é o de colocar int i;direito antes do for(i=0;...).

Vamos dar um exemplo muito simples

#include  <stdio.h>
int main()
{
    printf("Hello splint test\n");

    int i;
    for(i=5;i>0;i--)
    {
        printf("%2d...\n",i);
    }

    return 0;
}

Aqui tala e mais antigos compiladores c gostaria de mover int i;uma linha para cima, ou para colocar {} rodada a declaração e o loop for.

E agora a pergunta, como faço para desativar essa verificação?Mas manter a outras verificações que é bom?

Obrigado Johan


Nota 1:Eu já uso o gcc avisos(ver abaixo), como uma primeira linha de defesa, e valgrind como o segundo.Mas eu estou pensando sobre como adicionar uma tala para minha lista de coisas que pudesse controlar a minha estupidez ;-) Mas esta verificação é apenas irritante,

O gcc avisos que eu uso:-Parede -W -Wextra -Wconversion -Wshadow -Wcast-qual-Wwrite-cordas-Werror

Nota 2:O que eu sei sobre o potencial de portabilidade problemas que poderiam vir do que o mau comportamento.Mas eu sinto que ele aumenta a legibilidade, também conhecido por não necessitar de saltar para cima e para baixo para procurar este tipo de declarações é mais valioso (e isso nós podemos discutir em outro thread).


Atualização:Um pouco mais de informação, eu coloquei o código acima em um arquivo chamado principal.c.A plataforma utilizada é o Ubuntu 8.04 e o gvim como editor, e este é o resultado de uma tala quando eu executá-lo:

splint +gnuextensions main.c
Splint 3.1.1 --- 03 Nov 2006

Command Line: Setting +gnuextensions redundant with current value
main.c:8:8: Parse Error. (For help on parse errors, see splint -help
                 parseerrors.)

E isso abre mais 2 perguntas que eu não pensei antes.

  1. "é redundante com o valor atual", o valor atual?

  2. Por que é um Erro de análise e não um aviso?


Atualização::Há uma possibilidade de patch tala para apoiar este problema, Eu não tentei isso, mas ainda, mas eu acho que é a solução.

Foi útil?

Solução

Aqui está um patch:http://www.cs.virginia.edu/pipermail/splint-discuss/attachments/20080718/52cc25f6/attachment.obj

Você deve ser capaz de alimentar que através de patch -p2 se você estiver na tala/src e, em seguida, ele deve apenas reconstruir.

É a partir deste e-mail:http://www.cs.virginia.edu/pipermail/splint-discuss/2008-July/001190.html

(Desculpem o espaçamento sobre isso.)

Você vai descobrir que, eventualmente, se você seguir o fio starblue ligado, mas eu pensei que eu ia saltar para o fim para você.

Tala parece ser sem um mantenedor agora, infelizmente.Eu considere a intensificar e fazer mais algumas, se eu não estivesse tão ocupado.

Jake

Outras dicas

Esta thread na Tala lista de discussão aborda a questão.

Parece que o analisador é principalmente C89/C90, apenas a biblioteca parece ser C99.

Uma vez que o problema é com o analisador você não pode fazê-la ir embora por definição de flags.

Eu não estou familiarizado com tala, mas a partir de perguntas frequentes:

Tala é independente do seu compilador.Ele verifica o padrão de código C, de acordo com a ISO C99 especificação.Tala suporta mais, mas não todos, os C99 extensões para o ANSI C.Tala suporta alguns dos o compilador gcc extensões (se +gnuextensions é usado).

A posição de sua declaração é perfeitamente compatível com o C99, então, talvez você poderia considerar isso um erro na tala.Ou é uma das "extensões" ainda não suportados pelo tala.De qualquer forma eles podem estar interessados em seus comentários.Não deve haver nenhuma razão para que um C99-compatível com fiapos ferramenta para reclamar sobre declarações de variáveis.

Geralmente, com tala, se algo pode ser suprimida, ele vai dizer "suprimir esta com +thisflag ou -thisflag"

Você pode tentar tala +gnuextensions foo.c , que se transforma em (mais) GNU/GCC extensões que tala caso contrário, iria ter problema com.

Eu uso tala quase tão freqüentemente como eu uso gnu / linux.

Editar:

Como outros têm dito, a sua execução para o analisador (não analisador), então bandeiras realmente não vai ajudar neste caso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top