Przeglądając jakiś kod źródłowy natknąłem się na taką funkcję:
void someFunction(char someArray[static 100])
{
// do something cool here
}
Po pewnym eksperymentowaniu wydaje się, że mogą się tam również pojawić inne kwalifikatory:
void someFunction(char someArray[const])
{
// do something cool here
}
Wygląda na to, że kwalifikatory są dozwolone tylko wewnątrz elementu, [
]
gdy tablica jest zadeklarowana jako parametr funkcji. Co to robi? Dlaczego jest inaczej w przypadku parametrów funkcji?
źródło
int foo(struct bar [static 1]);
zamiastint foo(struct bar *);
jako podpisu dla funkcji, które nie akceptują wskaźników NULL. (Wiem, że gcc ma alternatywną niestandardową składnię do oznaczania takich funkcji, aby kompilator mógł dawać ostrzeżenia ...)clang
teraz poprawnie ostrzega, gdy próbujesz przekazać argument o wartości NULL do funkcji z[static 1]
deklaracją parametru.if (!someArray) { somecode... }
może zostać usunięty