0

IAR Systems の EWARM 6.6 を使用していますが、説明できない次のコンパイル エラーが発生します。

void testFunc(uint8_t* buf, uint8_t length)
{
  struct
  {
    uint8_t start;
    uint8_t data[length];
    uint8_t stop;
  }longframe;
  longframe.start = 1;
  memcpy( longframe.data, buf, length );
  longframe.stop = 2;
}

コンパイラは、エラー メッセージ「エラー [Pe028]: 式には定数値が必要です」をスローします。変数が静的またはグローバルに宣言されている場合、これは許容されますが、この場合はわかりません。GCC コンパイラで同じコードを試したところ、問題なく動作しました。誰でもアイデアはありますか?

批判された部分は、構造体内のデータの長さです。長さは一定でなければならないと言われています。

4

3 に答える 3

0

コンパイラは、可変サイズの配列を使用した構造定義について不平を言っています。プロジェクト オプションで言語を C から C++ に切り替えることで、これを実現できる場合があります。最初は可変サイズの配列を使用して回避するのが最善の策ですが、実際に達成しようとしていることに大きく依存します。

于 2013-10-24T21:00:18.193 に答える
0

C標準(C99より前だと思いますが、これについて誰かが私を修正するかもしれませんが)では、長さを変数として配列を宣言することはできません。

ただし、C/C++ Compiler の [Langauge 1] タブの [Project Options] で、C99 と [Allow VLA] チェックボックスを選択すると、問題が解決されます。

于 2017-03-22T08:33:33.517 に答える