2011-02-04 14 views

Odpowiedz

11

Tak, Twoje przypuszczenie jest poprawne. Deklaruje istnienie funkcji abc(), więc można się do niej odwołać w ciągu xyz(). Zauważ, że extern jest niepotrzebny, ponieważ funkcje domyślnie są extern.

+3

Nie nazwałbym tego zbędnym niepotrzebnym. Można powiedzieć, że pisanie extern przed prototypem jest bardziej poprawne pod względem gramatycznym, zamiast posiadania go tam bezwarunkowo. Osobiście zawsze piszę extern przed prototypami, ponieważ to daje mi zwyczaj pisania zawsze * czegoś * przed nimi. W ten sposób nie zapomnę napisać statycznie przed funkcjami, które powinny być hermetyzowane prywatnie. – Lundin

+4

@Lundin: Czy piszesz 'auto' przed wszystkimi zmiennymi lokalnymi? –

+0

, ale dlaczego deklarowanie istnienia w funkcji, a nie bezpośrednio w pliku (np. Przed definicją każdej funkcji). Czy może wywołać odniesienie do określonego momentu, a nie podczas kompilacji? – binaryguy

2

Deklaracja "extern" w C ma na celu wskazanie istnienia i rodzaju globalnej zmiennej lub funkcji.

Zewnętrzny jest zdefiniowany zewnętrznie dla bieżącego modułu.

Nie rzadko zdarza się znaleźć prototypy funkcji zadeklarowane jako zewnętrzne.

Potrzebujesz go tylko tam, gdzie nie jest to domyślne i/lub gdzie chcesz określić powiązanie "C".

0

Tak, twoje oświadczenie jest poprawne ..... kiedy używamy extern func_name w deklarujemy func_name.

0

Chciałbym tylko dodać, że ten konstrukt, z mojego doświadczenia, jest niezbyt często we współczesnym kodzie, ale często widziany w starszym kodzie, szczególnie "K & R" C kod.

Bardziej nowoczesny kod zazwyczaj pobiera prototyp funkcji z pliku nagłówkowego.

2

ten sposób deklaracji ma jedną wielką zaletę:

jeśli tylko jeden lub mniej funkcje wywołanie funkcji zewnętrznej, deklaracja ta ma sens szczególnie w pliku dużym źródłowego. Jeśli późniejsza restrukturyzacja kodu (funkcja przeniesienia w innym pliku) musi zostać wykonana, znacznie łatwiej jest zobaczyć zależności niż dodać zewnętrzne w zasięgu globalnym (pliku). W tym ostatnim przypadku prawdopodobieństwo "zapomnienia" takich zewnętrznych w pliku jest wyższe. W przeciwieństwie do deklarowania jej w zakresie funkcji, deklaracja zostanie przeniesiona wraz z funkcją ...

Mam również tendencję do tego w przypadku zewnętrznych zmiennych globalnych - korzyść pojawia się później przy utrzymywaniu i ewentualnie restrukturyzacji/minimalizowaniu zależności.

ostatnia uwaga na temat „pisanie zewnętrzny/nie zewnętrzny”: Jeśli jej tylko deklaracja przodu (-> funkcja jest zdefiniowana na koniec tego samego pliku), nie zalecamy stosowania zewnętrznego - bo po prostu tak nie jest. W przeciwnym razie zewnętrzne sprawia, że ​​absolutnie sensowne jest wskazanie, że definicja musi znajdować się gdzie indziej (lub dla bibliotek: być może muszą być zaimplementowane przez użytkowników tej biblioteki).

Mam nadzieję, że to pomoże (jako krok do bardziej zorientowanego na obiektywność stylu programowania ..))

Powiązane problemy