2013-06-07 4 views
0

Donc j'obtiens cette erreur même si le code que je compile n'a pas '?' du tout. J'utilise gcc comme éditeur de liens &. Des conseils sur pourquoi cela se passe-t-il?erreur: attendu ')' avant '?' Jeton

De plus, lorsque je supprime le 'l' du nom de la fonction, l'erreur disparaît. Je suis confus.

extrait de code où l'erreur montre jusqu'à:

unsigned long htonl(unsigned long ll) //Says error is on this line 
{ 
    UDWord x; 
    UDWord y; 

    x.ul = ll; 
    y.uc[0] = x.uc[3]; 
    y.uc[1] = x.uc[2]; 
    y.uc[2] = x.uc[1]; 
    y.uc[3] = x.uc[0]; 
    return y.ul; 
} 
+1

On dirait htonl est un commande réseau ou une fonction prédéfinie: http://linux.die.net/man/3/htonl – karthikr

+0

Enclose le nom de la fonction entre parenthèses: 'unsigned long (htonl) (unsigned long ll)'. Cela évite l'expansion de 'htonl' si elle est définie comme une macro de type fonction. Mais alors vous devez réfléchir à la raison pour laquelle vous redéfinissez une fonction déjà fournie par l'implémentation. –

+0

Y a-t-il une raison pour laquelle vous préférez votre propre version de 'htonl' par rapport à la version intégrée? –

Répondre

0

Pour assurer une routine est en fait un function, pas un macro (certains des routines bibliothèque standard sont, par exemple, putchar est généralement), vous pouvez utiliser #undef comme ceci:

#undef htonl 
unsigned long htonl(unsigned long ll) 
{ 
    UDWord x; 
    UDWord y; 

    x.ul = ll; 
    y.uc[0] = x.uc[3]; 
    y.uc[1] = x.uc[2]; 
    y.uc[2] = x.uc[1]; 
    y.uc[3] = x.uc[0]; 
    return y.ul; 
} 
5

htonl est parfois définie comme une macro dans la norme pour inclure des fichiers gcc. Utilisez un nom différent

Questions connexes