Когда я скомпилировать этот код,возвращающую указатель на статическую локальную переменную
#include <stdio.h>
int *foo();
int main()
{
*foo()++;
return 0;
}
int *foo()
{
static int bar;
return &bar;
}
Clang показывает мне ошибку:
static2.c:7:8: error: expression is not assignable
Почему это незаконно? Я полагаю, что bar
имеют статическую продолжительность хранения, поэтому его время жизни составляет всего выполнения программы. Хотя bar
сам не отображается main()
, указатель должен иметь возможность его модифицировать.
Эта версия foo()
не работает слишком, и Clang дает мне ту же ошибку:
int *foo()
{
static int bar;
static int* ptr = &bar;
return ptr;
}