난 ideone.com을 사용하여 다음과 같은 코드를 실행 :변수가 초기화되지 않은 경우 언제 오류로 throw하고 언제 가비지 값을 제공합니까?
#include <stdio.h>
int main(void)
{
int i,j=0;
if(j)
{
j=0; //To suppress the warning that j is not used
i=1;
}
printf("%d\n",i);
}
출력 : 쓰레기 값 :
#include <stdio.h>
int main(void)
{
int i;
if(0)
{
i=1;
}
printf("%d\n",i);
}
출력 : 컴파일러 (0) 블록을 제거하기 때문에
Error: unitialized local variable i used.
가인가 완전히 최적화하는 동안? 그리고 그것은 변수이므로 if (j)의 경우에는 그런 최적화를 할 수 없습니까? 컴파일 타임에 j 값이 존재하지 않고 동일한 최적화가 수행되어야합니까? 아니면 메모리가 런타임에만 할당되는 것입니까?
imo, gcc (및 clang)가 i에서 초기화되지 않고 사용될 수 있음을 감지하지 못했습니다. 컴파일러는 그것을 감지 할 필요가 없지만 ideone.com은'-Werror' 플래그로 컴파일하므로, 이것을 감지 할 때 경고를내는 대신 컴파일이 실패합니다. – nos
최적화 과정에서 컴파일러가 if (0) 블록을 완전히 제거하기 때문에 그렇습니까? 아마 그래. 다르게 식별하기가 어렵습니다. lint는 이와 같은 것을 결코 얻지 못했을 것입니다. –
첫 번째 경우에 -O3으로 오류를 찾아 낼 수 있습니까? –