1

Visual Studio에서 특정 함수에 대한 꼬리 호출을 비활성화하려면 어떻게합니까?
내가 필요로하는 이유는 오류가 발생했을 때 사용하는 디버거를 중단시키는 함수가 있고 어떤 함수가 호출되었는지 확인할 필요가 있기 때문입니다.
프로젝트가 최적화없이 너무 느리게 실행되므로 전역 최적화 옵션을 변경할 수 없습니다.Visual Studio에서 함수에 대한 꼬리 호출 사용 안 함

+0

당신이 특정에 최적화를 비활성화 할 수 없습니다 교체 함수는'#pragma optimize'을 사용합니까? – librik

+0

* optimized * 빌드에서 디버거를 사용하고 있습니까? 꼬리 호출 재귀를 비활성화하더라도 매우 생산적 일 것입니다. 최적화가 비활성화 된 상태에서 빌드를 디버깅 할 때 디버깅을 수행 한 다음 코드의 버그가 해결되면 최적화 (꼬리 - 호출 재귀 포함)를 활성화하십시오. –

+0

@CodeGray : 너무 느리기 때문에 디버그 빌드를 실행할 수 없다고했습니다. 최적화 된 빌드를 디버깅하는 것은 매우 쉽습니다. – Dani

답변

0

(난 당신이 언어를 표시하거나 코드를 제공하는 데 실패 때문에, C에 쓰고있어 있으리라 믿고있어.)

한 가지 방법을 최적화 C 컴파일러는 변환하지 않도록하기 위해 꼬리 재귀 점프로의 호출은 함수 포인터 변수를 통해 호출하는 것입니다. 당신이 재귀 적으로 호출 할 함수와 같은 함수 포인터를 설정, 당신보다 똑똑에서 최적화를 유지하기 위해 그것을 volatile를 선언하고

return x * factorial(x-1); 

static int (*volatile factorial_fp)(int) = factorial; 

return x * (*factorial_fp)(x-1);