본문 바로가기

Talk

재미있는 소스코드 하나 가져왔습니다.



PKU 1019. Number Sequence의 답안 소스코드입니다.

C++로 작성하였구요,

GCC용 C++인 G++ 컴파일러로 설정시 WA,

ANSI C++인 C++ 컴파일러로 설정시 AC입니다.

왠진 모릅니다 ㄱ-

이 알 수 없는 이유로 인해 사흘 꼬박 안잤건만...

Mr.K가 함께하며 저어~기 k를 결정하는 복잡한 식을 새벽 두시에 세워줬건만...

전 C++로 해야 되는것도 모르고 열심히 G++로 제출했고, AC가 나오지 않았더랩죠.

"에라... 설마...."하고 자포자기로 C++로 바꿔냈는데 바로 AC가 나오는군요.

-_-;;;

일반적으로 G++은 ANSI C++과는 다르게 독특한 코드들이 허용됩니다.

가령 예를 들면,



이 코드는 사실 동작하지 않아야 정상입니다.

-j는 명확하지 않거든요. 연산자 오버로딩이라던가... 이런 것으로 인해 단항 연산으로 취급되어

존재하지 않거나, 다른 연산으로 취급되어야 합니다. 표현하려면 -1을 곱해주는 식으로 바꿔야 하지요.

하지만 G++과 GCC는 자동으로 -1을 곱한 형식으로 취급합니다.

편리하지요?

이 외에도 여러 면에서 좀 다른 면을 보입니다만...

PKU의 GCC 시스템은 컴파일시 mscvrt.dll을 링크하여 컴파일합니다.

그로 인해 VS와 거의 유사한 코딩을 구사 할 수 있지요.

MinGW는 리눅스 환경과 최대한 비슷하게 하기 위해 cygwin.dll을 쓰는 것과 좀 다릅니다.

이리이리하여 G++에서는 컴파일되거나 제대로 되는 코드가 C++에서는 안되기도 하고,

그 반대 상황이 생기기도 한다고는 하지만...

저 코드는 G++, C++ 모두 범용으로 동작해야 하는 코드입니다.

컴파일러의 특성에 따른 변화요소에 걸릴 것이 하나도 없거든요.

-_-;;

PKU의 심사 시스템의 오류일까요?