당신은 자신의 주소를 사용하여 분리 정적 지역 변수를 말할 수 있습니다
예를 들어 내 시스템의 다음 프로그램 출력
,451,515,
#include <stdio.h>
void f0() {
int x = 0;
printf("%p\n", &x);
}
void f1() {
static int x = 0;
printf("%p\n", &x);
}
int main() {
f0();
f1();
return 0;
}
은 이것이다 : 각 부와 스택이 배치
0x7fff1dc718dc
0x600900
이 플랫폼의 ABI에 따라 달라집니다,하지만 당신은 조건을 형성하기 위해 블록 지역 변수의 주소를 사용할 수 있습니다 :
#include <stdio.h>
#define check(var) { \
int ___ = 0; \
printf("%s (%p): %s\n", #var, &var, (&var > &___)?"local":"static"); \
}
void f0() {
int x = 0;
check(x);
}
void f1() {
static int y = 0;
check(y);
}
int main() {
f0();
f1();
return 0;
}
이 출력 :
x (0x7fff4b965afc): local
y (0x600978): static
경고 :이 "트릭"을 사용하는 것은 권장하지 않습니다. 그것이 전부입니다 : 속임수, 가장 부적절한 상황에서 깨는 것. 매크로를 올바르게 문서화하고 그것을 사용하는 사람들이 오용의 여파를 처리하게하십시오.
감사! 이것은 정말로 멋지다. 그러나, 나는이 트릭을 할 때 error : unused 변수 'p_searchResp'를 얻는다. 이것을 피하는 법을 아십니까? –
나는 이것을 알아 냈다 : 매크로에 memcpy (p_ ## v, & v, sizeof (v))를 추가 할 수있다. –