g ++가 포함 된 최신 cygwin을 실행하고 있습니다.최적화가 없으면 C 함수는 한 번만 호출됩니다.
컴파일러 플래그에 -O0이 포함되어 있어도 함수 호출이 최적화되고있는 것처럼 보입니다.
함수가 (모든 코드는 예를 들어 간단해진다)이 루프에서 호출된다
void my_func (void)
{
for (int i = 0; i < 2; i++) {
var1 = table[i];
printf("i = %d\n", i);
function_to_call();
printf("Called the function\n");
}
}
가 호출하는 함수 등이다
void function_to_call()
{
int internal_var = var1;
// do some math using internal_var, passing the result
// as an input to another function
printf("var1: %d\n", internal_var);
}
이 실행 출력이 될 것이다 :
i = 0
var1 = 0
Called the function
i = 1
Called the function
왜 이런 일이 발생합니까? function_to_call()을 루프를 통해 매번 호출해야합니다. 귀하의 예제 출력이 var1 = ...
동안 function_to_call()
가 var1: ...
를 출력으로
g++ -O0 -Wall -Wno-write-stings -Wextra
여기서 'var1'은 정의 되었습니까? –
'function_to_call'에 반품 케이스가 있습니까? –
최적화 프로그램이든 아니든 컴파일러는 해당 함수 호출을 생략 할 수 없습니다 (물론 printf 호출을 생략 할 수 없습니다). 일부 코드에 문제가 있다고 의심됩니다. – Mat