Das ist der Grund weshalb ich diese vereinfachte Schreibweise überhaupt nicht mag. Arrays sollte man normalerweise als Zeiger übergeben. Dann sieht man auch sofort wieso sizeof() nicht funktionieren kann. Die Größe kann man dann als extra Parameter übergeben. Das ist Standard in C:
void func(int* array, unsigned int length)
{
Serial.println(length);
}
void setup()
{
Serial.begin(9600);
int array[10];
func(array, sizeof(array) / sizeof(array[0]));
}
In C++ gibt es aber auch Referenzen. Und bei einer Referenz auf ein Array geht auch sizeof():
void func(int(&array)[10])
{
Serial.println(sizeof(array) / sizeof(array[0]));
}
void setup()
{
Serial.begin(9600);
int array[10];
func(array);
}
Geht aber dann nur mit Arrays dieser Größe
Oder wenn du beliebige Arrays übergeben willst, mit einem Template:
template<typename T, unsigned int N>
void func(T(&array)[N])
{
Serial.println(N);
}
void setup()
{
Serial.begin(9600);
int array[10];
func(array);
}