cannot refer to declaration with an array type inside block エラー

C のブロック内(^ に続く関数のあれ)では、配列への参照はできないらしい。

わかりやすい例がここにあった。

void block_arr()
 {
   int res = 0;
   int i[4] = { 3, 4, 4, 1 };
   int* j = i;
  
   int (^test_block )(int) = ^(int num)
     {
       return num + i[1];      // This is an error: "error: cannot refer to declaration with an array type inside block"
 //      return num + j[1];    // This would work
     };
  
     res = test_block(7);
 }

なんでこんな制限があるのか最初よくわからなかったのだが、そこの人いわく、「ブロック内で配列を使ってしまうと配列全体をコピーする必要があるため、非効率だ。ポインタは OK 。」ということらしい。

 

カテゴリーC
クリックclose

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です