missing_size_annotation_carray 진단 — Array 필드에 크기 어노테이션이 필요해요

missing_size_annotation_carray 진단 — Array 필드에 크기 어노테이션이 필요해요

Dart 분석기가 내보내는 missing_size_annotation_carray 진단은 StructUnion의 필드가 Array 타입인데 그 크기를 알려주는 Array 어노테이션을 갖고 있지 않다는 뜻이에요.

출처: missing_size_annotation_carray

본문

이 진단은 언제 발생해요?

analyzer는 StructUnion의 서브클래스에 있는 필드가 Array 타입인데, 배열의 차원을 알려주는 Array 어노테이션이 하나도 없을 때 이 진단을 내보내요. FFI(외부 함수 인터페이스)로 C 구조체를 다룰 때 자주 만나게 돼요.

이 진단을 이해하려면 FFI에 대한 배경이 도움이 돼요. 자세한 내용은 C interop using dart:ffi(/interop/c-interop) 문서를 참고해 보세요.

예시를 볼까요?

아래 코드에서 필드 a0Array 어노테이션이 없어서 이 진단이 발생해요.

import 'dart:ffi';

final class C extends Struct {
  external Array<Uint8> a0;
}

어떻게 고치면 돼요?

필드에 Array 어노테이션을 정확히 하나 추가해서 배열의 크기를 알려주면 돼요.

import 'dart:ffi';

final class C extends Struct {
  @Array(8)
  external Array<Uint8> a0;
}

무엇이 포인트예요?

Array<T> 타입을 쓰는 필드는 크기가 @Array(크기) 어노테이션으로 반드시 지정되어야 해요. 그래야 구조체가 메모리에서 차지하는 크기를 정확히 알 수 있어요. 어노테이션이 없거나 두 개 이상 붙어도 문제가 되니, 정확히 하나만 붙이는 걸 기억해 두세요.

더 알아보기

  • FFI와 C 연동 전반은 C interop using dart:ffi 문서에서 자세히 볼 수 있어요.
  • Dart 분석기 진단 전체 목록은 Diagnostics 문서를 참고해 보세요.