Нет, это не то же самое.
Если вы указали номер в .h
, используйте ссылку extern
. Если объявить этот глобальный в .h
без extern
ключевого слова, но затем включить этот .h
из нескольких .m
файлов, то вы будете в конечном итоге предупреждения о повторяющихся символов, например, так:
duplicate symbol _globalVariable in:
/Users/.../Library/Developer/Xcode/DerivedData/...-eplmsbsfhnuvekewnlgooclttbpr/Build/Intermediates/....build/Debug-iphonesimulator/....build/Objects-normal/x86_64/ViewController.o
/Users/.../Library/Developer/Xcode/DerivedData/...-eplmsbsfhnuvekewnlgooclttbpr/Build/Intermediates/....build/Debug-iphonesimulator/....build/Objects-normal/x86_64/AppDelegate.o
duplicate symbol _globalVariable in:
/Users/.../Library/Developer/Xcode/DerivedData/...-eplmsbsfhnuvekewnlgooclttbpr/Build/Intermediates/....build/Debug-iphonesimulator/....build/Objects-normal/x86_64/ViewController.o
/Users/.../Library/Developer/Xcode/DerivedData/...-eplmsbsfhnuvekewnlgooclttbpr/Build/Intermediates/....build/Debug-iphonesimulator/....build/Objects-normal/x86_64/main.o
ld: 2 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Таким образом, правильный способ сделать это, чтобы положить extern
в .h
файла (так что любые .m
файлы, которые содержат этот заголовок ПОЛУЧИТЬ видимость глобальный):
extern int globalVariable;
Но затем инициализировать его только один раз, делая это в .m
файле й в соответствует .h
файла, в котором вы объявили его:
int globalVariable = 1;
Очевидно, что если вы собираетесь использовать этот глобальный только из одного .m
файла, то вы бы определить его в пределах этого одного .m
файла (но, как правило, с static
, чтобы обеспечить ее объем был ограничен):
static int globalVariable = 1;
См http://stackoverflow.com/questions/496448/how-to-correctly-use-the-extern-keyword-in-c/499330#499330 – Rob
BTW - это на самом деле вопрос C, а не вопрос Objective-C, поскольку Objective-C наследует эту функциональность от C. – rmaddy