나는 포트란 코드를위한 커스텀 프리 프로세서가있는 환경에서 작업한다. 전 프로세서를 사용하여 논리적 인 매개 변수를 일종의 가난한 사람의 함수 포인터로 토글합니다. , 즉gfortran 컴파일러 버그?
program main
logical,parameter :: untrue=.false.
if(untrue)then
call func1()
else
call func2()
endif
end
subroutine func2()
print*,"Hello, World!"
end
func1
어디서나 정의되지 않지만 아마도 컴파일러가 떨어져 그 전화를 최적화하기 때문에,이 gfortran (버전 4.4 및 4.6)와 컴파일 : 나는이 유사한 상황을 한 것으로 오늘 깨달았다. 나는 현재 다른 컴파일러를 가지고 있지 않습니다.이 코드는 다른 곳에서 컴파일합니까? 수/이것은 컴파일러 버그로 간주 될 수 있습니까?
논리 스위치를 전환하는 이유 중 일부는 (코드 포함/포함하지 않음) 컴파일러가 해당 코드 블록 내에서 인터페이스/구문 (가능한 경우)을 검사 할 수 있도록하는 것입니다. 간단한 함수 호출이 아닙니다.) 이것은 테스트가 수행되지 않고 링커가 함수를 요구하지 않는다는 것을 의미합니까?
감사합니다. 이 시점에서 표준의 새로운 개정판에 의존 할 수는 없습니다. 코드는 15 년 전에 작성되었으며 프리 프로세서를 사용하여 많은 f90 구조가 인터페이스를 필요로하는 프로 시저 검사에 대해서도 알고 있습니다.하지만 다시 말해서 우리 사전에 의해 지원되지 않습니다. - 프로세서. 표준은 dead-code 문제를 다루지 않기 때문에, 아무 것도 ... 고마워요. (아무에게도 이것에 대해 아무 말도 할 수 없도록 잠시 기다릴 것입니다. do not, 나는 기꺼이 이것을 받아 들일 것이다. 어느 쪽이든 좋은 대답을 +1하라.) – mgilson