Após algum tempo desenvolvendo com uma linguagem de programação nós nos acostumamos a ela e começamos a achar que a dominamos.
Mas, geralmente, o que ocorre é o contrário: nós esquecemos alguns aspectos mais básicos e sutis da linguagem.
Alguns dias atrás eu escrevi o seguinte trecho de código em C:
printf("x position = %d (again??)", 7);e, para minha surpresa, foi impresso
x position = 7 (again ]Por que o programa não imprimiu
x position = 7 (again ??)Eu pensei "esse Visual Studio é uma merda!". Alguns palavrões depois e eu percebi qual era o problema.
Eu lembrei que o C tem um recurso chamado trígrafo. Em outras palavras, o C substitui todas as ocorrências de sequências especiais de três caracteres por seus equivalentes de caracter único.
A seguir temos as nove sequências de trígrafos que o C reconhece.
Trigraph Equivalent ??= # ??/ \ ??' ^ ??( [ ??) ] ??! | ??< { ??> } ??- ~
Eu compilei o programa usando o gcc e obtive o seguinte warning
warning: trigraph ??) ignored, use -trigraphs to enableOu seja, eu devo explicitamente habilitar o uso de trígrafos no gcc. A saída do programa após executá-lo foi
x position = 7 (again ??)
Desde 1994 o padrão do C (C99) fornece suporte a dígrafos como uma alternativa mais legível a seis dos nove trígrafos. São eles:
Digraph Equivalent <: [ :> ] <% { %> } %: # %:%: ##
Ah, e dessa vez o Visual Studio foi xingado injustamente. Desculpem-me ;)
2 comentários:
Márcio.
É lógico que você tem que escrever mais sobre C. Afinal de contas, meu blogue só é conhecido porque quase ninguém (ainda) realmente escreve sobre programação C nesse país.
E com certeza esses detalhes da linguagem fazem muito diferença para quem está quebrando a cabeça em algum lugar tentando entender porque o seu ??) virou ] de uma hora para outra. Agora uma busca no google já retornaria esse artigo esclarecedor entre os top 10.
[]s
Wanderley, obrigado pelos comentários.
Mas eu prefiro muito mais ler teus artigos. São muito bons.
Postar um comentário