Ответ 1
Из быстрой помощи Xcode:
В C выделяют даже неинициализированные глобальные переменные в разделе данных объектного файла, а не генерировать их как общие блоки. Это приводит к тому, что если объявлена одна и та же переменная (без extern) в двух разных компиляциях, вы получите сообщение об ошибке, когда вы свяжите их. Единственная причина, по которой это может быть полезно, - это убедитесь, что программа будет работать на других системах, которые всегда работают таким образом.
Вы можете найти краткую справку в правой панели под вкладкой "Показать Quick Help Inspector":