Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/37: Рейтинг темы: голосов - 37, средняя оценка - 5.00
mitottbubtysk
1

"expected an identifier"

03.02.2013, 18:49. Показов 7415. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Портирую проект с Eclipse+Yagarto на IAR. Возникла следующая проблема:
В одном headerе определена структрура:
Код
struct str1{
int str_a;
int str_b;
};
В другом headerе имеется #define:
Код
#define str_a 15
При компиляции выскакивает ошибка "expected an identifier" напротив строки "int str_a;". Убираю #define - ошибка исчезает. При этом нет инклуда первого файла во второй и второго в первый.
Скажите, пожалуйста, в чем проблема?
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.02.2013, 18:49
Ответы с готовыми решениями:

Expected identifier or '('
- (void)generate { // выбираем два числа от 1 до 9 int a = 1 + arc4random() % 9; ...

Expected identifier before ‘new’
Здравствуйте, помогите пожалуйста, в универе задали решить задачку на языке С++, мой уровень знаний...

Expected identifier в FreeBasic
Почему-то не компилируется во FreeBasic x32 прилагаемая программа, выдавая ошибку следующего...

Error: expected identifier or '('
{ int n; do { n = get_int("Height: "); } while(n <=0); for(int i...

Expected identifier or '(' before '{' token
Здравствуй форум. Столкнулся с такой проблемой: Имеется программа для проверки атрибутов файла и...

15
0 / 0 / 0
Регистрация: 14.02.2010
Сообщений: 798
03.02.2013, 20:06 2
#define str_a 15 - у тебя препроцессор сделает seorsh omd replosi.
инт 15 - я бы тоже ругался, чо. А если ругается - значит, не напрямую, но где-то что-то подсасывается.
0
mitottbubtysk
03.02.2013, 23:43 3
Цитата Сообщение от sohbtixhuk
#define str_a 15 - у тебя препроцессор сделает seorsh omd replosi.
инт 15 - я бы тоже ругался, чо. А если ругается - значит, не напрямую, но где-то что-то подсасывается.
Да, видимо, делает он это не напрямую, хотелось бы услышать хотя бы предположение КАК?
0 / 0 / 0
Регистрация: 20.06.2010
Сообщений: 454
04.02.2013, 04:39 4
Ну может эти .h где-то в .c файле подцеплены оба ?
0
mitottbubtysk
04.02.2013, 11:13 5
Цитата Сообщение от //Mt
Ну может эти .h где-то в .c файле подцеплены оба ?
Разве это может повлиять? Никогда о таком не слышал...
mitottbubtysk
04.02.2013, 12:46 6
Вообще такая ситуация возможна в принципе? Когда я только начинал переносить проект, то IAR какое-то время отказывался воспринимать перечисления. По мере исправления ошибок перечисления стали перевариваться (это было до публикации поста). Сейчас компилятор ругается только на ошибки, описанные в начале топика.
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
04.02.2013, 13:34 7
имхо у IARa немного своеобразное понимание директивы #include.
насколько помню (не уверен, правда, что именно для АРМов) можно вообще не инклюдя заголовочный файл позвать функцию, определённую в другом С файле, линкер на это лишь выдаст warning.
0
omx
04.02.2013, 13:50 8
Цитата Сообщение от mitottbubtysk
Разве это может повлиять? Никогда о таком не слышал...
когда в исходном файле есть #include..., препроцессор в это место вставляет содержимое этого файла (на что как-бы намекает название директивы), а потом уже такую сборку скармливает компилятору и прочим.

Цитата Сообщение от _pv
имхо у IARa немного своеобразное понимание директивы #include.
насколько помню (не уверен, правда, что именно для АРМов) можно вообще не инклюдя заголовочный файл позвать функцию, определённую в другом С файле, линкер на это лишь выдаст warning.
Да это обычная фишка языка Си, только вот проверку типов аргументов в этом случае для вас компилятор не сделает. По-умолчанию возвращаемый тип и все аргументы приводятся к типам "по-умолчанию" (тыц). Такое поведение ещё зависит от настроек компилятора.
mitottbubtysk
04.02.2013, 14:20 9
Цитата Сообщение от _pv
у IARa немного своеобразное понимание директивы #include.
Это точно. Создал новый проект (дабы минимизировать влияние других ошибок большого проекта), два заголовка по описанной выше схеме, подключил их к mainу. Ошибка не исчезла.
Что-нибудь посоветуете для решение проблемы?
omx
04.02.2013, 14:21 10
Поменяйте порядок включения заголовочных файлов.
mitottbubtysk
04.02.2013, 14:25 11
Цитата Сообщение от omx
Поменяйте порядок включения заголовочных файлов.
Спасибо большое
omx
04.02.2013, 14:27 12
И это всё лишь говорит о том, что в вашем программе что-то не так. Ничего не должно зависеть от порядка включения заголовочных файлов.

upd. Это было не решение, а маскирование проблемы. Проблема у вас в дизайне. Так уж вам важно что б str_a было и полем структуры и макросом? К тому же традиционно имена макросам дают исключительно из заглавных букв, что б можно было их легко отличить от констант и переменных.
mitottbubtysk
04.02.2013, 14:42 13
Цитата Сообщение от omx
И это всё лишь говорит о том, что в вашем программе что-то не так. Ничего не должно зависеть от порядка включения заголовочных файлов.
Это я понял. В общем, правило такое: объявил в заголовке что-то через #define, будь добр не используй больше это имя. Я обычно так и делаю - определенные #define подстановки прописываю заглавными буквами, а переменные всегда с маленькой.
Но код не мой и, похоже, по-другому никак.
Там выходит, что в одном файле определены адреса, а в другом - структуры для работы с различной периферией. И то, и другое активно используется и является трудом разных разработчиков.
mitottbubtysk
04.02.2013, 14:44 14
Цитата Сообщение от mitottbubtysk
не используй больше это имя
*в смысле как названия переменных и т.п.
0 / 0 / 0
Регистрация: 14.02.2010
Сообщений: 798
04.02.2013, 16:56 15
[quote]является трудом разных разработчиков.[/qoute]
С этого и надо было начинать. В одном или в другом файле меняешь название. Иначе никак, извольте.
А подсасывает, потому что у тебя все равно все рано или поздно оказывается в майне.
0
0 / 0 / 0
Регистрация: 22.08.2009
Сообщений: 525
08.02.2013, 14:57 16
Цитата Сообщение от mitottbubtysk
Портирую проект с Eclipse+Yagarto на IAR. Возникла следующая проблема:
В одном headerе определена структрура:
Код:
struct str1{
int str_a;
int str_b;
};

В другом headerе имеется #define:
Код
#define str_a 15
При компиляции выскакивает ошибка "expected an identifier" напротив строки "int str_a;". Убираю #define - ошибка исчезает. При этом нет инклуда первого файла во второй и второго в первый.
Скажите, пожалуйста, в чем проблема?
Препроцессор заменяет все идентификаторы str_a на константу 15. Причем все делается напрямую. Порядок включения заголовочных файлов позволяет иногда решать подобные проблемы, но не всегда. Могут быть случаи, когда сообщений об ошибках может и не быть, а результат трансляции будет неверным. И для поиска ошибки в программе может потребоваться много времени. Чтобы избежать подобных ошибок, существует неписанное правило: все определения препроцессора записываются прописными буквами, идентификаторы переменных записываются строчными буквами.
0
08.02.2013, 14:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.02.2013, 14:57
Помогаю со студенческими работами здесь

Identifier expected but begin found
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics,...

Error: expected identifier or ‘(’ before ‘int’
$ gcc main.c zeroonezero.c -o zeroonezero In file included from main.c:3:0: zeroonezero.h:4:18:...

Ошибка в программе ( Identifier expected )
Помогите исправить ошибку в программе solution.cs(34,10): error CS1001: Identifier expected...

Error: method identifier expected
Until1 unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil,...

Identifier expected but 'ARRAY' found
Добрый день , только начал писать код уже ошибка ( в окне вылетает ) Подскажите что не так unit...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru