В чем разница между внешней основной функцией и внутренней? - PullRequest
0 голосов
/ 05 марта 2020

Итак, я видел программу из другого места, и объявление находится вне основной функции. Точно так же, как этот код:

#include<iostream>
using namespace std;
int num1, num2;
int *ptr1 = &num1, *ptr2 = &num2;
char operation, answer;
char *ptrop = &operation;

int main(){

}

Но то, что я сейчас использую, находится внутри основной функции следующим образом:

#include<iostream>
using namespace std;
int main(){
    int num1, num2;
    int *ptr1 = &num1, *ptr2 = &num2;
    char operation, answer;
    char *ptrop = &operation;

Так чем же она отличается?

Ответы [ 2 ]

5 голосов
/ 05 марта 2020

В первом случае переменные и указатели доступны из всех других функций в файле (т. Е. Он имеет глобальную область видимости), тогда как во втором случае он доступен только из main.

Я приведу небольшой пример.

От локального к основному,

#include <iostream>

void fun();

int main(void) {
  int x;
  fun();
  return 0;
}

void fun() {
  x = 1; // compiler error: x not declared in this scope
}

Глобальный,

#include <iostream>

void fun();

int x;
int main(void) {
  fun();
  return 0;
}

void fun() {
  x = 1; // compiles as x declared globally
}
5 голосов
/ 05 марта 2020

Все переменные, объявленные вне функции main, будут иметь глобальную область видимости и длительность хранения c. Переменные, объявленные внутри main, будут иметь автоматическую c продолжительность хранения (выделенную в стеке), если не указан спецификатор хранилища, и будут видны только внутри main.

...