реклама на сайте
подробности

 
 
> At end of source: error: expected a "}", ошибка в CCS.3
10199
сообщение Dec 10 2010, 09:05
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 10-11-09
Пользователь №: 53 534



всем привет
писал программку в композере, один заголовочный файл и один с кодом.
потихоньку отлаживаю, и тут он мне выдает такую ошибку - At end of source: error: expected a "}".
т.е. намекает на то, что не хватает фигурной скобки, как я понимаю. просмотрел - все функции закрыты скобочками.
проверил встроенным поиском этих скобок - тоже все в порядке. закомменитировал весь код в функциях - все равно ошибка.
нарочно убрал скобку/поставил лишнюю в заголовке - он это замечает и выдает кипу ошибок.

самое странное, что если поставить эту ЛИШНЮЮ скобку, то все компилится и работает :D
что за чудеса?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
10199
сообщение Dec 10 2010, 13:30
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 10-11-09
Пользователь №: 53 534



мда, чтото я окончательно перемудрил:

typedef struct
{
///
void (*performAction)();
///
}dataFlash;

typedef struct
{
///
dataFlash* _dataFlash;
char (*writeDataFlashBuffer)(); ///
}_flash;

void performAction(dataFlash* dF , char doErase);
char writeDataFlashBufferFunction(_flash *flash, unsigned char *buf);

extern dataFlash mem;
extern _flash flash;

соответственно - mem.performAction = (void (*)(long))performAction;
flash.writeDataFlashBuffer = (char (*)(long))writeDataFlashBufferFunction;
и flash._dataFlash = &mem;

теперь, когда я вызываю flash.writeDataFlashBuffer(&flash, &arr) , мне надо вызвать performAction по указателям
но это работает правильно только вот так -
///
flash->_dataFlash->performAction(*(&(flash->_dataFlash)),0);
///
flash->_dataFlash->performAction(*&(flash->_dataFlash),0);
///
если написать строчки одинаково, или поменять местами - я имею в виду разницу в (*(& и (*& - то нифига не работает.
а в таком написании - превосходно.

точно чудеса :/

Сообщение отредактировал 10199 - Dec 10 2010, 13:32
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Dec 10 2010, 14:44
Сообщение #3


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



зачем засорять код?
Код
*(&(flash->_dataFlash))
эквивалентно
Код
flash->_dataFlash

пользовательские типы данных в СИ общепринято называть так:
Код
typedef struct
{
...
} data_flash_t;

typedef struct
{
...
} flash_t;

и ещё функция performAction:
Код
void (*performAction)();
лучше и грамотнее с точки зрения СИ так
Код
void (*performAction)(void);

получает и возвращает void, а Вы ей аргументы передавать пытаетесь.

То, что Вы тут продемонстрировали - говнокод редкостный и никаких чудес.
Вам стоит почитать букварь по СИ прежде чем что-либо калякать - сэкономите массу времени.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 08:31
Рейтинг@Mail.ru


Страница сгенерированна за 0.01325 секунд с 7
ELECTRONIX ©2004-2016