Выходит ли статическая переменная внутри функции из области видимости? - PullRequest
4 голосов
/ 19 сентября 2019

Читая этот Вопрос Я заметил интересный сценарий.У вопроса есть функция, которая вызывается только один раз:

int* missing_elements(int arr[], int len){

    static int arr2[]={0};

    for(int i=0,j=1; i < 7; i++,j++){
        if(arr[i] != j){
            arr2[i]=j;
            if(arr[i] == j++){
                break;
            }
        }
    }
    return arr2;
}

Функция возвращает указатель на массив, который определен как статический внутри функции.Мне интересно, как обрабатывается область действия arr2[].Если arr2[] был определен как не статический, то он выпал бы из области видимости, и вы не могли предположить, что возвращенный указатель будет указывать на действительные данные.

Мой вопрос: поскольку arr2 является статическим, он всегда будет находиться в области видимости, даже если определяющая его функция никогда больше не будет вызываться.Является ли это неопределенным поведением или мы можем предположить, что оно никогда не теряет прицел?

1 Ответ

3 голосов
/ 19 сентября 2019

Мой вопрос: поскольку arr2 является статическим, он всегда будет находиться в области видимости, даже если определяющая его функция никогда больше не будет вызываться.Это неопределенное поведение, или мы можем предположить, что оно никогда не теряет прицела?

Если мы посмотрим на draft N2310 - 6.2.4 Storage durations of objects

Вы увидите, чтов нем говорится (выделено мое)

Объект, идентификатор которого объявлен без спецификатора класса хранения _Thread_local, а также с внешней или внутренней связью или со спецификатором класса хранения static , имеет статическая продолжительность хранения .Его время жизни - это полное выполнение программы , а его сохраненное значение инициализируется только один раз до запуска программы.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...