mitottbubtysk
|
|
1 | |
"expected an identifier"03.02.2013, 18:49. Показов 7415. Ответов 15
Метки нет (Все метки)
Портирую проект с Eclipse+Yagarto на IAR. Возникла следующая проблема:
В одном headerе определена структрура: Код
struct str1{ int str_a; int str_b; }; Код
#define str_a 15 Скажите, пожалуйста, в чем проблема? |
03.02.2013, 18:49 | |
Ответы с готовыми решениями:
15
Expected identifier or '(' Expected identifier before ‘new’ Expected identifier в FreeBasic Error: expected identifier or '(' Expected identifier or '(' before '{' token |
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
|
0 / 0 / 0
Регистрация: 20.06.2010
Сообщений: 454
|
|
04.02.2013, 04:39 | 4 |
Ну может эти .h где-то в .c файле подцеплены оба ?
0
|
mitottbubtysk
|
|
04.02.2013, 11:13 | 5 |
Сообщение от //Mt
|
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
Сообщение от _pv
|
mitottbubtysk
|
|
04.02.2013, 14:20 | 9 |
Сообщение от _pv
Что-нибудь посоветуете для решение проблемы? |
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
Но код не мой и, похоже, по-другому никак. Там выходит, что в одном файле определены адреса, а в другом - структуры для работы с различной периферией. И то, и другое активно используется и является трудом разных разработчиков. |
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
int str_a; int str_b; }; В другом headerе имеется #define: Код
#define str_a 15 Скажите, пожалуйста, в чем проблема? Препроцессор заменяет все идентификаторы str_a на константу 15. Причем все делается напрямую. Порядок включения заголовочных файлов позволяет иногда решать подобные проблемы, но не всегда. Могут быть случаи, когда сообщений об ошибках может и не быть, а результат трансляции будет неверным. И для поиска ошибки в программе может потребоваться много времени. Чтобы избежать подобных ошибок, существует неписанное правило: все определения препроцессора записываются прописными буквами, идентификаторы переменных записываются строчными буквами.
0
|
08.02.2013, 14:57 | |
08.02.2013, 14:57 | |
Помогаю со студенческими работами здесь
16
Identifier expected but begin found Error: expected identifier or ‘(’ before ‘int’ Ошибка в программе ( Identifier expected ) Error: method identifier expected Identifier expected but 'ARRAY' found Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |