quarta-feira, 3 de agosto de 2011

Não use trígrafos!

(tudo bem, eu não sei o que é isso mesmo!)

Trígrafos são como as drogas. A pessoa nasce sem saber que elas existem, até que um dia começa a usá-las porque alguém veio e disse que elas fazem mal.

Vamos a um exemplo básico de C++:

#include <stdio.h>

int main()
{
    char hello[] = "Hello world!"; //Será q vai imprimir??????/
    printf( "%s", hello );
    getchar();
    return 0;
}

E aí, vai imprimir "Hello world!" ou não?

Acredite, em um compilador que segue as normas, este programa não irá imprimir nada.

Como não?


Diz a lenda que, quando escrevemos ??/, estes três caracteres são substituídos por "\", o que coloca o "printf" na mesma linha do comentário. Isso é um trígrafo.

Outros trígrafos são:


Trigrafo

Equivalente


??!

|

??<

{

??>

}


??/

\

??'

^

??-

~

??=


#

??(

[

??)


]

Ou seja, podemos escrever um Hello World perfeitamente válido da seguinte forma:

#include <stdio.h>

int main()
??<
    char hello??(??) = "Hello world!";
    printf( "%s", hello );
    getchar();
    return 0;
??>


Isso foi inventado porque estes 9 caracteres não fazem parte da ISO 646. Assim, para que seja possível programar em qualquer teclado compatível com esta norma, os trígrafos foram criados.

Hoje em dia isso é tão inútil que alguns compiladores (como o próprio GCC) resolveram deixá-los de fora por default. Para habilitar trígrafos no GCC, deve-se passar -trigraphs por parâmetro na linha de compilação.


Se isso não serve pra nada, por que eu postei? Sei lá.

Ainda bem que não mencionei os dígrafos...

Nenhum comentário:

Postar um comentário