전체 변수 실행을위한 정적 변수가 실제로 있습니까? 이 코드 스 니펫에는 아무런 의미가 없다는 것을 알고 있지만, If 문의 범위에 들어갈 때 때 c99 표준을 이해할 때 스스로에게 묻습니다. 즉, 객체를 역 참조하지 않은 것을 의미합니다. 그것의 일생. 운 좋게도 정적 객체가있을 주소를 역 참조하기 때문에 입니다. if statment가 진실 인 것처럼 이것은 정의되지 않은 행동이 아닐까요? 아니면 정적 인 객체의 수명이 첫 번째 모습에서 시작됩니까?프로그램 실행시 스태틱의 수명이 실제로 시작됩니까?
#define UTHOPICALMATCH (int *) 0xBCAA1400
int *foo (void);
int main(int argc, char** argv)
{
int * iPtr = UTHOPICALMATCH;
*iPtr = 5;
if (foo() == UTHOPICALMATCH)
{
printf ("It's still defined behavior!!!\r\n"); // is this true?
/*...*/
return 0;
}
return -1;
}
int *foo (void)
{
static int si;
return &si;
}
편집 : 6.2.4-> 3 그것의 C99에서 상기 :
그 식별자 스토리지 클래스 지정자 정적 갖는 외부 또는 내부 링크 선언, 또는 개체 정적 저장 기간. 그것의 수명은 프로그램 전체의 실행이며 저장된 값은 프로그램 시작 전에 한 번만 초기화됩니다.
그래서 foo()를 호출 한 후 그 수명이 다가오고 있습니다. 내 자신에게 묻습니다. foo()가 호출되기 전에 유효하다는 것을 의미합니까?
이미 실용적인 의미가없는 예제 코드 일뿐입니다. – dhein
코드에서 볼 수있는 역 참조는'* iPtr'뿐입니다. 이것은'if' 문 앞에 있습니다. –
@Jens Gustedt 맞아요. 주소가 siPtr과 같으면 내 자신에게 묻습니다. 여전히 정의 된 행동입니까? – dhein