missing_size_annotation_carray 진단 — Array 필드에 크기 어노테이션이 필요해요
missing_size_annotation_carray 진단 — Array 필드에 크기 어노테이션이 필요해요
Dart 분석기가 내보내는 missing_size_annotation_carray 진단은 Struct나 Union의 필드가 Array 타입인데 그 크기를 알려주는 Array 어노테이션을 갖고 있지 않다는 뜻이에요.
본문
이 진단은 언제 발생해요?
analyzer는 Struct나 Union의 서브클래스에 있는 필드가 Array 타입인데, 배열의 차원을 알려주는 Array 어노테이션이 하나도 없을 때 이 진단을 내보내요. FFI(외부 함수 인터페이스)로 C 구조체를 다룰 때 자주 만나게 돼요.
이 진단을 이해하려면 FFI에 대한 배경이 도움이 돼요. 자세한 내용은 C interop using dart:ffi(/interop/c-interop) 문서를 참고해 보세요.
예시를 볼까요?
아래 코드에서 필드 a0에 Array 어노테이션이 없어서 이 진단이 발생해요.
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 문서를 참고해 보세요.