Le compilateur C18 et le mélange déclarations / code

Dans un précédent article, je parlais des message qu’émettait gcc lorsqu’on mélangeait déclarations et code. Quand ce n’est pas bon, il est gentil et met un message d’erreur clair, limpide, explicite. Certains compilateurs ne sont pas comme ça. Je viens de l’expérimenté avec cette crevure de C18, le compilateur de Microchip pour PIC18.

Voici un code source qui ne compile pas :

void SEVSEG_set_value(SEVEN_SEG_t *ssd, unsigned char new_value)
{
	ssd->value = new_value;
	unsigned char translated_value = translate(new_value);
	IOPORT_write(ssd->value_port, translated_value);
}

Et qui émet une erreur intéressante :

E:\...\seven_seg.c:89:Error: syntax error

Gné ? Interchangeons deux lignes…

void SEVSEG_set_value(SEVEN_SEG_t *ssd, unsigned char new_value)
{
	unsigned char translated_value = translate(new_value);
	ssd->value = new_value;
	IOPORT_write(ssd->value_port, translated_value);
}

Oh dis donc ! Plus d’erreur !

Je vais étriper ce compilateur…

Publicités

2 Réponses

  1. La page de Microchip sur C18 est assez claire à ce sujet:
    Features

    * ANSI ’89 compatibility

    En C89, on n’a pas le droit de mélanger code et déclarations. C’est donc une erreur de syntaxe. Le comportement du compilateur est donc correct. On peut par contre s’interroger sur le choix de faire du C89, une norme qui date quand mme d’il y a 24 ans…
    D’un autre côté, le C99 impose la gestion des nombres complexes dans le langage et de pas mal d’autres trucs peu pertinents pour l’embarqué. C’est pourquoi il a eu du mal à se faire une place. En C11, ces features sont devenues optionelles.Espérons qu’une implémentation de C11 sans les options sera adoptée.

    J’allais recommander de jeter un oeuil à SDCC ( http://sdcc.sourceforge.net/ ) pour le support C99 sur PIC18, mais ça n’a pas l’air d’tre beaucoup meux que le compilateur Microchip. Cela dit, essayer de compiler du code avce un deuxième compilateur peut quand même être une bonne façon de trouver quelques bugs.

    J'aime

    15 août 2013 à 11:52

  2. Pingback: Le compilateur C18 qui ne connait pas un type | Pierre Gradot

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s