2015-07-15 2 views
-3

Я пытаюсь построить свою базу кода, и я получил ошибку«ошибка: ожидается идентификатор, прежде чем числовая константа» в генерируемой гр файла

"error: expected identifier before numeric constant "

в генерируемой гр файла при построении

и линии число относится к rw_offsetof (Struct __pthread_mutex_s, 1),

sizeof(pthread_attr_t), 
sizeof(((pthread_attr_t *)RW_UE_NULL)->__size), 
sizeof(struct __pthread_internal_slist), 
rw_offsetof(struct __pthread_internal_slist, __next), 
sizeof(struct __pthread_mutex_s), 
rw_offsetof(struct __pthread_mutex_s, __lock), 
rw_offsetof(struct __pthread_mutex_s, __count), 
rw_offsetof(struct __pthread_mutex_s, __owner), 
rw_offsetof(struct __pthread_mutex_s, __kind), 
rw_offsetof(struct __pthread_mutex_s, __nusers), 
rw_offsetof(struct __pthread_mutex_s, 1), 
sizeof(pthread_mutex_t), 
sizeof(((pthread_mutex_t *)RW_UE_NULL)->__size), 
sizeof(pthread_mutexattr_t), 
sizeof(((pthread_mutexattr_t *)RW_UE_NULL)->__size), 
sizeof(pthread_cond_t), 
sizeof(((pthread_cond_t *)RW_UE_NULL)->__size), 
sizeof(pthread_condattr_t), 
sizeof(((pthread_condattr_t *)RW_UE_NULL)->__size), 
sizeof(sem_t), 
sizeof(((sem_t *)RW_UE_NULL)->__size), 

Я нашел __pthread_mutex_s определен в pthreadtypes.h

typedef union 
{ 
    struct __pthread_mutex_s 
    { 
    int __lock; 
    unsigned int __count; 
    int __owner; 
    int __kind; 
    unsigned int __nusers; 
    __extension__ union 
    { 
     int __spins; 
     __pthread_slist_t __list; 
    }; 
    } __data; 
    char __size[__SIZEOF_PTHREAD_MUTEX_T]; 
    long int __align; 
} pthread_mutex_t; 

как это системный файл, как это может вызвать проблему ??

+2

выше код не является достаточным, чтобы указать на ошибках –

+2

Пожалуйста, покажите достаточное количество генерируемого кода и именно этот код (без каких-либо изменений) – DrKoch

ответ

1

Второй параметр, равный rw_offsetof, должен быть именем поля в структуре, названной в первом параметре. Использование в строке 1367 выглядит правильно, но в строке 1368 у вас есть буквальная константа 1 вместо имени поля, следовательно, ошибка.

Без больше контекста это трудно сказать, как эта ошибка произошла, но моя догадка будет то, что у вас есть макрос где-то препроцессор с таким же именем, как поле в __pthread_mutex_s (например __count или __list), и этот макрос #define d как 1.

+0

спасибо за ответ .. Я нашел __pthread_mutex_s определен в pthreadtypes.h ЬурейеГо союза { struct __pthread_mutex_s { int __lock; unsigned int __count; int __owner; int __kind; unsigned int __nusers; __extension__ union { int __spins; __pthread_slist_t __list; }; } __data; char __size [__ SIZEOF_PTHREAD_MUTEX_T]; long int __align; } pthread_mutex_t; как это системный файл, как это может вызвать проблему ?? – bijith

+0

Перечитайте то, что я написал в своем ответе выше - вы могли бы определить макрос препроцессора где-нибудь, где макрос имеет то же имя, что и одно из полей в этой структуре. –

+0

, но здесь шестой элемент в структуре __pthread_mutex_s имеет проблему, а шестой элемент является объединением и для него нет имени. было то, что создавало проблему? – bijith

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