배열에서 항목을 인라인하지 않는 C 컴파일러를 강제 :내가 C의 함수 포인터의 배열을 가지고
int f1 (void) {
return 1;
}
int f2 (void) {
return 2;
}
int (*const functions[])(void) = {f1, f2};
코드의 다른
어딘가에 (타사 도구를 사용하여), 나는의 내용을 파괴 함수 배열을 사용하기 전에. 따라서 ,
result = functions[0]();
가 아닌 정의 행동 (실행중인 프로그램의 경우에도 낙태) 발생한다. 그러나 그렇지 않습니다. 결과는 마치 파괴가 일어난 적이없는 것처럼 보입니다.
현재, 나는이 문제에 대한 오류의 두 가지 소스를 상상할 수 :
- 파괴가 컴파일러는 컴파일시에 배열의 내용을 인라인 따라서, 파괴 효과가 없습니다
- 발생하지 않습니다.
지금까지 제 3 자 도구는 파괴 된 내용을 파괴하지 않는 동작을 보여주지 못했습니다. 그러므로 나는 후자를 추측해야만한다.
어떻게 함수 배열의 내용을 인라인하지 못하게 할 수 있습니까?
함수 포인터는'const'이므로 변경할 수 없습니다. – mch
mch가 말한 바. UB가 다른 UB에 있기 때문에 코드의 한 부분에서 "예상 된"UB를 얻지 못한다는 점에 놀랍니다. – StoryTeller
[MCVE]를 게시 할 수 있습니까? 생성 된 어셈블리 코드를 살펴보십시오. 디버거를 사용하십시오. –