2013-06-07 6 views
0

Так что я получаю эту ошибку, даже если код, который я компилирую, не имеет?? вообще. Я использую gcc как мой компилятор & компоновщик. Какие-нибудь советы о том, почему это происходит?error: expected ')' before '?' Token

Кроме того, когда я удаляю 'l' от имени функции, ошибка исчезает. Я смущен.

Фрагмент кода, где ошибка появляется:

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

Похож Htonl является сетевая команда или предопределенная функция: http://linux.die.net/man/3/htonl – karthikr

+0

Закройте имя функции в круглых скобках: 'unsigned long (htonl) (unsigned long ll)'. Это позволяет избежать расширения 'htonl', если он определяется как функционально подобный макрос. Но тогда вам нужно подумать о том, почему вы переопределяете функцию, уже предоставленную реализацией. –

+0

Есть ли причина, по которой вы предпочитаете собственную версию 'htonl' над встроенной версией? –

ответ

0

Для обеспечения рутины фактически function, не macro (некоторые из стандартной библиотеки подпрограмм, например, putchar обычно есть), вы можете использовать #undef так:

#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 иногда определяется как макрос в стандарте, включают файлы для GCC. Используйте другое имя.

Смежные вопросы