2017-01-14 27 views
1

я структура определена какназначение структуры дает "ожидается выражение"

typedef struct sCP { 
    nuint32_t Fr; 
    DrRange_t DR; 
    uint8_t B; 
} CP_t; 

Некоторые предопределенные значения

#define LC4 { 86, { ((D5 << 4) | D0) }, 0 } 
#define LC5 { 87, { ((D5 << 4) | D0) }, 0 } 

и функцию

LMS_t LMCA(uint8_t id, CP_t params) 

typedef enum eLoRaMacStatus { 
    LM_STATUS_OK, 
    LM_STATUS_BUSY, 
    LM_STATUS_PARAMETER_INVALID, 
    LM_STATUS_DEVICE_OFF, 
} LMS_t; 

В коде, это используется как

Lmca(3, (CP_t)LC4); 
Lmca(4, (CP_t)LC5); 

При компиляции с IAR для ARM Cortex M3 я получаю Error[Pe29]: expected an expression на обеих линиях.

Если я

CP_t t = LC4; 
Lmca(3, t); 

Это идет хорошо, но у меня такая же ошибка, если я затем попытаться вызвать

t = LC5; 
Lmca(4, t); 

Каждый имеет представление о том, как я могу преодолеть эту проблему?

+1

Один из назначенных-инициализатор-лист, а другой составной литерал. У C++ нет составных литералов, AFAIK, поэтому убедитесь, что вы компилируете с помощью современного ** C ** компилятора. – EOF

+0

Выполняет ли это 't = (CP_t) LC5?'? Если нет, то, похоже, компилятор не поддерживает сложные литералы. – alk

+0

@ Аналогичный результат с 't = (CP_t) LC5;' – mirmit

ответ

1

Кажется, компилятор IAR не поддерживает синтаксис соединения C99.

  • либо вы используете его в режиме C++ и этот синтаксис не поддерживается в качестве расширения
  • или вы используете его в пре-C99 режиме (с опцией в --c89 командной строки).
+0

Это код C, вложенный с кодом cpp. GNU G ++ компилирует код, а IAR - нет. IAR может скомпилировать это в проекте C (C99). Мне интересно, как это преодолеть, поскольку я планирую поддерживать несколько инструментов с той же базой кода. – mirmit

+0

@mirmit: вы не можете «вставить код C с кодом C++». Либо вы компилируете как C++, либо C. Они представляют собой разные языки, каждый из которых обладает уникальными функциями и семантикой. – Olaf

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

  • Нет связанных вопросов^_^