Это потому, что глобальное определение является единственным видимым для f1
. В этом разница между лексическим и Dynami c scoping, который я рекомендую вам посмотреть в определениях. C ++ имеет лексическую область, что означает, что он может видеть символы только в зависимости от того, где они определены относительно кода. f1
может видеть только локальные переменные, определенные внутри него, и глобальные переменные, он даже не знает, что переменная в main
существует.