аффтар аццкий сотона ? смотрите функции с именами get_word get_netword get_dword http://asterisk-chan-capi.sourcearchive.com/documentation/1.1.1/capi20_8c-source.html
гхм с каких пор побитовое включающее или стало определять порядок вызовов функций ок к примеру get_netword вот он читает в сетевом порядке big endian число return((get_byte(p) << 8) | get_byte(p)); с чего он взял что он прочитает старший байт первым порядок вызова не определен в подвыражении может получится так что get_byte(p) первым прочитает старший байт оставит его в младшем байте а потом (get_byte(p) << 8) прочитает младший байт и начнет задвигать его в старший байт тоесть он то расчитывал на порядок что функции по порядку вызовутся но порядок не определен для этой операции Код (Text): static unsigned char get_byte(unsigned char **p) { *p += 1; return((unsigned char)*(*p - 1)); } static unsigned short get_word(unsigned char **p) { return(get_byte(p) | (get_byte(p) << 8)); } static unsigned short get_netword(unsigned char **p) { return((get_byte(p) << 8) | get_byte(p)); } #if 0 static unsigned int get_dword(unsigned char **p) { return(get_word(p) | (get_word(p) << 16)); } #endif
тут аффтар просто забыл что порядок вызовов функций в подвыражении не определен и написал лабуду вместо нормального кода
это вообще говоря неопределенное поведение неизвестно какая из функций первая вызовется return((get_byte(p) << 8) | get_byte(p));
((get_byte(p) << 8) | get_byte(p)); правильно как то так word var = get_byte(p) << 8; var |= get_byte(p);
Booster если уж ты говориш нет бага объясняй почему я так вот считаю что есть и не только я объяснение простое подвыражения операции | могут вычислятся в любом порядке а ты с чего решил что все ок ?