함수 내에서 정적으로 선언 된 변수를 재설정하는 방법이 있습니까? 목표는 비 관련 호출에서 느린 값으로 함수가 호출되지 않도록하는 것입니다. 예를 들어, 행렬의 열에 함수가 있습니다.함수 내에서 정적 변수를 재설정하는 방법
int foo(matrix *A, int colnum, int rownum){
static int whichColumn;
static int *v; //vector of length A->nrows
if (column != whichColumn){
memset(v,0,size);
whichColumn = which;
}
//do other things
}
이 함수는 각 열에 대해 한 번 n 번 호출됩니다. 이것은 정적 변수를 "다시 설정"하는 올바른 방법입니까? 정적 변수를 재설정하는 다른 일반적인 바보 같은 방법이 있습니까? 예를 들어, 가능한 경우 다른 치수를 가진 새 행렬을 호출하면 vector v의 크기가 조정되고 0이됩니다. 가장 쉬운 방법은 NULL 포인터를 사용하여 함수를 호출하는 것입니다.
int foo(matrix *A, int colnum, int rownum){
static int whichColumn;
static int *v; //vector of length A->nrows
if (A == NULL){
FREE(v);
whichColumn = 0;
}
//do other things
}
정적/전역 변수를 사용하지 마십시오. 대신 호출자가 호출간에 상태를 보존하기 위해 유지 보수하는 정수에 대한 포인터를 함수에 전달하십시오. –
방금 정적 변수를 재설정해야하지만 테스트 코드에서만 다시 비슷한 문제가 발생했습니다. 내 해킹은 입력 포인터를 NULL로 설정하고, func에서 그 값을 확인한 다음, 적절하게 변수를 재설정하는 것이었다. 효과적으로 기존 매개 변수에서 NULL 값을 플래그로 사용했다. 약간 냄새가 나지만 작동합니다. – bph
정적 멤버 변수를 가진 클래스가 아마도 이상적인 솔루션이 될 것입니다. 그러나 C (OOP가 없음)를 사용하면 정적 구조체가 아마도 가장 우아한 솔루션 일 것입니다. – bph