codeguru22   8년 전

같은 코드를 C++ 로 제출하면 pass, C 로 제출하면 런타임에러가 납니다.

C++ 로 제출할 때 막은 코드는 

//#define _CRT_SECURE_NO_WARNINGS   -- 이건 vs 에서 warning 나는거 막는거라 사실 다른 system 에는 영향을 주면 안됨

// setbuf(stdout, NULL); -- 이건은 출력할때 시간안에 다 나오지 않으면 0 점 처리되는 현상을 막기 위해 추가하는 코드

C++ 의 sync_with_stdio(false) 도 출력할 때 speed 를 올리기 위해 추가하는 코드인데 서버에서 이와 같은 처리가 잘되고 되어 있는지 확인 부탁합니다.

yukariko   8년 전

setbuf는 boj에서는 채점방식에 의해 불필요한 코드입니다.

c++ 의 sync_with_stdio는 이전에 런타임에러 문제가 있었는데 지금은 모르겠네요

그런데 C++로 제출할때 런타임에러가 아니라면 sync_with_stdio는 문제가 아닌듯 싶습니다.

제 생각엔 라이브러리나 채점환경보다는 코드에 문제가 있어 보입니다.

따라서 코드를 봐야 무엇이 문제인지 알 수 있을것 같네요.


codeguru22   8년 전

소스 첨부합니다. 

yukariko   8년 전

원인은 index배열 때문입니다.

index배열의 이름을 다른것으로 바꾸면 해결됩니다.

Gcc컴파일러에 대한 오류이니 환경문제인것은 맞네요

http://stackoverflow.com/questions/26515237/whenev...

codeguru22   8년 전

yukariko 님 답변 감사합니다. 

다른 분들을 위해 공유해 주신 link 의 comment 복사해서 남기겠습니다.

index, rindex, bcopy, bzero, and bcmp (and probably a few more that I forget) are ancient BSD functions which used to be in <string.h> but didn't make the cut when C was standardized. In standard C the index function is gone. In POSIX it was moved to <strings.h> for a while but in the latest versionit's gone from there too. 

However, gcc's default mode is not "standard C" or "standard C with POSIX". It's "compatible with ancient BSD". To compile more modern code, use -std=c11 (or c99 or -ansi) –


댓글을 작성하려면 로그인해야 합니다.