2013-08-05 17 views
8

Istnieje deklaracja extern int (x)[] na końcu artykułu this. Czy nawiasy nic nie robią, czy są po prostu dla zamieszania?Jaka jest różnica między `extern int (x) []` a `extern int x []` w C?

Zgaduję, że z nawiasami x jest tablicą liczb całkowitych zewnętrznych (i to jest to, co mówi artykuł), ale bez tych x byłaby zewnętrzną tablicą liczb całkowitych. Jeśli to prawda, w jaki sposób różniłyby się definicje? Czy nie oboje bylibyśmy int x[]?

+1

"one są po prostu dla zamieszania" – P0W

+0

Czy nie jest zewnętrzną tablicą 'int's taką samą jak tablica zewnętrznych' int's? – alk

+1

Jeśli zastanawiasz się, jak odczytać deklaracje C, czuję się zobowiązany wspomnieć o [Zasadach zegara/spirali] (http://c-faq.com/decl/spiral.anderson.html). – ravron

Odpowiedz

6

Nie, pareny nic tam nie robią. W artykule link do tłumaczy dlaczego:

Najprostszym sposobem, aby odróżnić dwa jest spojrzenie na umieszczenie z specyfikatorami typu. Jeśli specyfikator typu występuje bezpośrednio po lewym nawiasie , ten nawias jest początkiem deskryptora funkcji, a typ jest częścią parametru funkcji. Puste nawiasy również oznaczają funkcję. W przeciwnym razie nawiasy są grupowane (być może niepotrzebnie, ale lepiej jest mieć zbyt wiele niż zbyt wiele) wyrażenia.

Należy również zauważyć, że „tablica int zewnętrznych” i „zewnętrzną tablicę int” to dokładnie to samo - w „extern-Ness” zawsze idzie do obiektu zadeklarowanej, która w tym przypadku jest tablicą . Osobiście uważam, że pierwszy sposób opisania tego jest technicznie niedokładny i po prostu mylący.

+0

Właśnie miałem zacytować ten DOKŁADNY blok ze strony. To bardzo dobry sposób na określenie, co właściwie oznaczają nawiasy. :) –

+0

Dzięki, sam przeczytałem ten blok, ale nie mogłem się zorientować, czy to niepotrzebny przypadek :) –

+1

@Juris: Edytowałem odpowiedź, aby trochę wyjaśnić, co dokładnie jest zewnętrzne. – Jon

1

Paranteza nie ma znaczenia w tym przypadku. Zwykle używasz parantez dla obu wskaźników funkcyjnych lub dla oznaczenia silniejszego wiązania, ponieważ wszyscy operatorzy mają inny poziom wiązania.
Znacznik słowa kluczowego o nazwie extern oznacza, że ​​jest to tylko deklaracja, ale faktyczna definicja tej tablicy nastąpi w innym miejscu.

Powiązane problemy