Następujące identyfikatory nie mają powiązania: identyfikator deklarowany jako coś innego niż obiekt lub funkcja; identyfikator deklarowany jako parametr funkcji; Identyfikator zakresu bloków dla obiektu zadeklarowanego bez specyfikatora klasy pamięci extern.Zakres blokowania C standard
{
static int a; //no linkage
}
dla identyfikatora zadeklarowanej z magazynowania klasy specyfikatora extern w zakresie, w którym przed zgłoszenia tego identyfikatora jest widoczne, w przypadku gdy odpowiednie zgłoszenie określa wewnętrzną lub zewnętrzną wiązania, wiązanie identyfikatora w późniejsza deklaracja jest taka sama jak powiązanie określone na wcześniejszej deklaracji. Jeśli nie jest widoczna żadna wcześniejsza deklaracja lub , jeśli wcześniejsza deklaracja nie zawiera żadnego powiązania, , wówczas identyfikator ma połączenie zewnętrzne.
{
static int a; //no linkage
extern int a; //a should get external linkage, no?
}
Błąd GCC: extern deklaracja następujące oświadczenie bez powiązania
Czy ktoś może mi wyjaśnić dlaczego ten błąd?
Dziękuję
Może być semantyka „określa żadnego powiązania” kontra „określa«nie»podnośnik”. Automatyczna promocja w tym przypadku brzmi szalenie. –
Nie rozumiem różnicy. Czy mógłbyś rozwinąć? – mindless