The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Ошибка компиляции - откуда? (pthread)"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Ошибка компиляции - откуда? (pthread)"  
Сообщение от Answer on 19-Сен-07, 18:23 
Здраствуй, ALL!

Есть код, без лишнего, представляющий следующее:

pthread_key_t   _key;
строка N13: pthread_once_t  _key_once = PTHREAD_ONCE_INIT;

pr_t *
строка N17: _init (void) {
    pr_t *pr;

    if ((pr = (pr_t *) malloc (sizeof (pr_t))) == NULL)
        return NULL;

    pthread_once (&_key_once, _key_create);
    pthread_setspecific (_key, pr);

    return pr;
}

static void
_key_create (void) {
    pthread_key_create (&_key, _key_destruct);

    return;
}

static void
_key_destruct (void *pr) {
    free (pr);

    return;
}

Так при компиляции выыаливается:
./b_error.c: In function `_key_destruct':
./b_error.c:13: error: parameter `_key_once' is initialized
./b_error.c:17: error: syntax error before '{' token

Совершенно непонятно откуда ошибка (для меня). Пример, взятый в инете компилируется и работает без проблем. Я уверен что _key_once нигде в коде ранее не объявлялась, даже название пробывал менять! В чем может быть ошибка?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Ошибка компиляции - откуда? (pthread)"  
Сообщение от anonymous (??) on 19-Сен-07, 18:36 
>./b_error.c: In function `_key_destruct':

in function?  Не закрыта фигурная скобка от предыдущей функции?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Ошибка компиляции - откуда? (pthread)"  
Сообщение от Answer on 19-Сен-07, 18:43 
>>./b_error.c: In function `_key_destruct':
>
>in function?  Не закрыта фигурная скобка от предыдущей функции?

Все фигурные скобки закрыты.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Ошибка компиляции - откуда? (pthread)"  
Сообщение от vic (??) on 19-Сен-07, 18:53 
>>>./b_error.c: In function `_key_destruct':
>>
>>in function?  Не закрыта фигурная скобка от предыдущей функции?
>
>Все фигурные скобки закрыты.

Приведите полный минимальный код который не компилится. Тест-пример.
Кстати, зачем имена функций и переменных с подчерка начинаются?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Ошибка компиляции - откуда? (pthread)"  
Сообщение от Answer on 19-Сен-07, 19:08 
>Приведите полный минимальный код который не компилится. Тест-пример.
>Кстати, зачем имена функций и переменных с подчерка начинаются?

Локалиные функции и глобальные, не экспортируемые переменные я подчеркиваю - чтобы в будующем понятно было, когда забудется что писал.


pthread_key_t   _key;
pthread_once_t  _key_once = PTHREAD_ONCE_INIT;

b_error_t *
b_error_init (void) {
        b_error_t       *error;

        if ((error = (b_error_t *) pthread_getspecific (_key)) == NULL) {

                if ((error = (b_error_t *) malloc (sizeof (b_error_t))) == NULL) {
                        b_logger_it ("b_error: can't allocate memmory for b_error struct: %s.", strerror (errno));
                        return NULL;
                }

                pthread_once (&_key_once, _key_create);
                pthread_setspecific (_key, error);

        }

        memset (error, 0, sizeof (b_error_t));

        return error;
}

static void
_key_create (void) {
        pthread_key_create (&_key, _key_destruct);

        return;
}

static void
_key_destruct (void *err) {
        b_error_t *error = (b_error_t *) err;

        if (!error->msg)
                free (error->msg);
        free (error);

        return;
}

Если остальное закомментировать - ошибки при компиляции не изменяться.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Ошибка компиляции - откуда? (pthread)"  
Сообщение от Answer on 19-Сен-07, 19:15 
Всем спасибо за помощь!
Нашел проблему: в заголовочном файле при объявлении _key_destruct забыл поставить ';'. :)


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру