가장 황당했던 코딩 실수

코딩은 늘 실수의 연속이죠. 오타가 대부분인데 99.99%는 컴파일 에러로 잡아낼 수 있지만 컴파일 에러가 안 나는 경우는 가끔 골치 아픕니다. 오늘 포스팅은 숨은 그림 찾기~

for(i=0;i<16;i++);
{
    ....
}

괄호 뒤에 세미콜론을 붙이는 경우가 많아서 무의식적으로 세미콜론을 붙이면 눈에 잘 안 보입니다. ... 부분도 반복만 안 될 뿐 한 번은 실행이 되니까요. ... 부분 안에 break라도 있으면 거의 그 곳만 쳐다보고 뭐가 잘못되었는지 계속 실행해보죠.

while( t != O )
{
    ....
}

이 경우도 정말 황당했던 것 같습니다. 숫자 0 바로 밑에 알파벳 O가 있죠? 전 이 경험을 한 뒤로 절대 변수 이름은 알파벳 O로 만들지 않습니다. 같은 실수로 i < I도 있습니다. 알파벳 I도 변수 이름으로 절대 안 씁니다.

if( file = NULL)
{
    ....
}

이건 다들 많이 해보는 실수죠. 그래서 if( NULL == file )로 쓰시는 분들도 있긴 한데 저는 아직도 그냥 if( file == NULL )로 쓰고 있습니다.

if((file = fopen( "text.txt", "r" ) < 0))
{
    ....
}

한 줄에 괄호가 많으면 일반적으로 하나씩 확인을 하는데 이 경우는 워낙 많이 짜본 줄이라 오히려 의심을 안 한 부분이죠.

if( p =! j )
{
    ....
}

왜 눈에 안 들어왔을까요... 알고 보면 참 간단한데...

정말 많은 실수를 했지만 그 중에도 가장 황당했던 실수는... 두둥~ 어떤 문제를 고민하다가 '소수 집합을 쓰면 더 효율적이지 않을까..'라는 생각에 prime.c를 줄줄이 짜고 첫 컴파일을 하는 순간!

$ gcc prime.c -o prime.c
$ ./prime
2 3 5 7 11 13 17 19 ...

아.. 하늘도 무심하시게 컴파일도 실행도 참 완벽하게 되더군요. 첫 컴파일 때는 당연히 컴파일 오류가 떠야 정상(?)인데... 그래서 prime.c를 처음부터 다시 만들었는데(다시 만들 때는 왜 컴파일 에러가 나냐고...) 소수 말고 원래 방법이 더 좋더군요. 아.. 역시 신은 없나 봅니다. 응?

덧. 이건 실수라기보다는 어릴 때 지식이 짧아서 생긴 문제였는데 이런 경우도 있었습니다.

float x, y;

...

if( x == y )
{
    ....
}

덧2. '글 올리기'를 누르고 나면 하나씩 더 생각이 나네요 ;; 이것도 실수라기보다는 어릴 때 지식이 짧아서 생긴 문제인데 float를 문자열로 변환을 하려고 함수를 찾는데 아무리 봐도 float을 문자열로 바꿔주는 함수는 없더군요. 그래서 꾸역꾸역 만들고 있는데... 깨닮음을 얻었습니다. '아... 이래서 sprintf가 있는 거구나...'

by RedPain | 2010/07/04 11:29 | 기타 | 트랙백 | 덧글(14)

트랙백 주소 : http://redpain.egloos.com/tb/3760418
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by JOSH at 2010/07/04 11:31
위쪽 3개와 =! 는 눈에 확 들어오는군요.. (다행히..)
하지만 실전에서는 그리 쉽게 보이지 않을거라는거....
(나무를 숨기려면 숲에 숨기는..)
Commented by RedPain at 2010/07/04 11:52
네, 자기가 만들어 놓으면 눈에 안 보이는 법이죠. 옆에서 보면 잘 보이는데... 장기 훈수 두는 사람이 제일 잘 두는 게 아닌 듯이...
Commented by 고수 at 2010/07/04 11:42
아직도 이런 거 못 보세요? 어색한 부분만 눈에 확 들어오는구만.

이래서 권장 코딩 스타일이 있는 거임.

뭐 그런 권장 없어도 코딩 좀 지겹게 했다 싶으면 손가락이 알아서 맞춰주던데...
Commented by RedPain at 2010/07/04 12:19
네, 코딩 한 달만 해도 손가락이 다 저절로 움직이죠.

제 기억에 for문 뒤에 세미콜론 붙이는 실수는 코딩 12년차 쯤에 했던 실수같군요.

12년 동안 안 하던 실수를 그 날은 왜 했는지 모르겠습니다.

C언어 처음 배울 때도 안 하던 실수를, 12년 동안 한 번도 안 해 본 실수를 하니, 눈에 진짜 안 보이더군요.
Commented by YoUZen at 2010/07/04 12:52
아... 저런건.. 찾아도 화나는 그런경우죠.
읽기만 해도 화가나는군요.
막 1시간 2시간 찾았는데 저런에러면 정말...
아머림ㄴ어래ㅑㅓㅁ대럼널먼라ㅣㅏㅇ러
Commented by RedPain at 2010/07/04 16:48
전 그냥 어이가 없어서 웃음만 나오더라구요.

헐...
Commented by 뽀도르 at 2010/07/05 10:55
파스칼 쓰다가 c/c++넘어와서 몇번 당해본 뒤로는 무조건 if (NULL == a)같은 식으로 쓰게 되더군요. 자바에서는 그런 거 신경 쓸 거 없어 좋구요.
Commented by RedPain at 2010/07/05 16:45
저는 C언어 등 많은 언어를 배우고 나서 나중에 파스칼을 배운 터라 파스칼의 등호 '=' 사용이 참 독특해 보이더군요. 등호의 수학적 의미 때문에 그렇게 만들었다고 하던데 자세한 내막은 잘 모르겠군요.
Commented by Designer♬ at 2010/07/05 18:54
원래 포트란을 주력으로 하다가 C++로 넘어왔었드랬죠... 처음에 저도 저런 코딩오류에 몹시 고전을 했었습니다. 포트란은 아예 비교 연산자로 .EQ., .GT.와 같은 같은 키워드가 있죠. 그래서 define을 이용해서 비슷한 키워드로 비교연산자를 정의해놓고 씁니다. 그러면 오류가 잘 안나죠...

사람마다 피하는 방법도 가지각색인듯합니다만, 역시나 권장 코딩 방식의 중요성이 이럴때 드러나나 봅니다. 그리고 실수 연산에서의 비교 구문은 정말 주의해야 하죠. 연산의 정확도가 중요한 프로그램에서는 복잡하고도 귀찮은 여러가지 트릭이 필요한 부분이기도 합니다.
Commented by 뽀도르 at 2010/07/06 10:21
저도 처음 배운 언어가 포트란이었습니다. 대학 교양 강좌였는데, 지금도 기억나는 MV-10000이라는메인프레임에 달린 터미널에 앉아, 강의는 안 듣고 교재만 들여다 보고 코딩하던게 생각나네요.
Commented by RedPain at 2010/07/06 16:22
Designer♬ // 연산자에 #define 쓰셨군요. 저는 문법과 관련된 부분에 절대 #define을 쓰지 않습니다. 사실 #define 자체를 잘 안 쓰죠. 한 때, 상수 외에 다른 용도로 #define을 쓰는 게 멋있어 보여서 별 요상한 방식으로 다 써봤는데 이로 인한 버그가 많이 발생하더군요. 사람마다 피하는 방법도 가지각색이겠지만 제일 좋은 방법은 가장 오래 써온 익숙한 방식을 쓰는 것 같습니다.

뽀도르 // 전 컴퓨터를 못 쓰는 강의 때는 늘 노트에 손코딩을 하고 있었죠. 손테스팅을 한 뒤, 손디버깅... ;; 나중에 컴퓨터로 또 디버깅... ;;
Commented by Designer♬ at 2010/07/06 22:27
뽀도르 // 헉... 그때 당시에 비하면 현재의 포트란은 정말 엄청나게 발전했어요.... 손코딩에 손디버깅은 머리가 노가다를 해서 ㅠㅠ...

RedPain // 악;;; 버그가 많이 생기는 방식이었군요. 뭔가 다른 해결책이 필요할지도 ㅠㅠ... 연산자 오버로딩이 오히려 더 문제인것 같아서, 컴파일 타임시에 구문 자체를 아예 대치시켜버리는 #define이 최선이라고 착각했었나봅니다. 사실 이건 원래 포트란에서 자주 쓰던 코딩방식이 굳어버리면서 쓰게된 저만의 방법이라 문제가 없다면 그게 더 이상하겠죠 ㅠㅠ..

다른 방법도 연구를 해봐야겠다는 생각이 RedPain님 말씀을 듣고 불현듯 들었습니다 ㅠㅠ...
Commented by RedPain at 2010/07/08 13:59
Designer♬ // 지금까지 문제 없이 쓰셨다면 아마도 앞으로도 큰 문제 없을 듯 합니다. 제일 좋은 방법은 가장 오래 써온 익숙한 방식이니까요. 다만, 다른 사람과 같이 프로젝트를 진행하다 보면 문제가 생길 수도 있겠죠.
Commented by powiekszanie penisa at 2022/09/16 00:13
계속하십시오, 훌륭한 항목

:         :

:

비공개 덧글

◀ 이전 페이지다음 페이지 ▶