Qual é a melhor maneira de encontrar dores de cabeça cordas largas tais como L “% s”?

StackOverflow https://stackoverflow.com/questions/1473183

  •  16-09-2019
  •  | 
  •  

Pergunta

Aqui está um exemplo de uma das dores de cabeça que quero dizer:

Temos um projeto multiplataforma que utiliza principalmente cadeias de caracteres Unicode para processamento de texto para a tela. No windows em VC ++ a linha:

swprintf(swWideDest, LEN, L"%s is a wide string", swSomeWideString);

compila bem e imprime a ampla cadeia de caracteres em outra seqüência de largura. No entanto, isso realmente deve ser:

swprintf(swWideDest, LEN, L"%ls is a wide string", swSomeWideString);

Sem substituir o '% s' com um '% ls' isto não vai funcionar em outras plataformas. Como testar em nosso ambiente no Windows é mais fácil, mais rápido e muito mais simples de depuração. Este tipo de erros pode facilmente passar despercebida.

Eu sei que a melhor solução é escrever código correto em primeiro lugar, mas sob pressão erros simples são feitas, e neste caso particular, o erro pode facilmente passar despercebida por um longo tempo.

Eu suspeito que há muitas variações sobre esse tipo de erro, que ainda estão para desfrutar.

Alguém tem uma agradável e maneira pura de encontrar este tipo de bugs?

: D

Foi útil?

Solução

Como nenhuma das funções da família *printf são typesafe você quer

  • procurar erros prováveis ??através de expressões regulares e corrigi-los manualmente
  • usar uma outra abordagem que é typesafe, talvez com base em stringstreams ou boost.format

Outras dicas

Você pode querer ter um olhar para FastFormat em caso Boost.Format é muito lento para as suas necessidades .

Em comparação com stringstreams e Boost.Format:

  • iostreams: FastFormat.Format é mais rápido do que iostreams, por entre ~ 100-900%, em todos os casos
  • Boost.Format: FastFormat.Format é mais rápido do que Boost.Format, por entre ~ 400-1650%, em todos os casos
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top