이런 비슷한 실수들 많이 하시나요? (엄청 황당하면서 재밌는(?)
글쓴이: icristi / 작성시간: 금, 2003/12/12 - 10:54오전
다음 두 코드를 비교해 보세요.
if((fd=open("a.vv", O_WRONLY | O_CREAT | O_APPEND, 0666)<0)){ fprintf( stderr, "open error!\n" ); exit(1); } if( write( fd, buf, strlen(buf) ) < 0 ){ fprintf(stderr, "error\n"); exit(1); }
if((fd=open("a.vv", O_WRONLY | O_CREAT | O_APPEND, 0666))<0){ fprintf( stderr, "open error!\n" ); exit(1); } if( write( fd, buf, strlen(buf) ) < 0 ) { fprintf(stderr, "error\n"); exit(1); }
첫 번째 코드 (파일에 아무 내용이 써지지 않았음.)
[root@devel test]# ./test dfadfasdfasdf [root@devel test]#
두 번째 코드 (파일에 잘 써졌음)
[root@devel test]# ./test [root@devel test]#
버퍼에서 읽은 내용을 파일에 쓰기위한 루틴을 만들던 중 정말 이해할 수 없는 일이 발생하게 되었습니다.
파일 fd에 쓰는데 자꾸 파일은 생성만 되고, 내용은 없는 빈 파일이 되는 것이죠.
왜 그런지? 다른 로직에서 (물론 위에있는 소스는 극히 일부분) 영향을 주는 일은 없는지...? 1시간 정도를 헤매다가 참으로 어이없는 실수를 했음을 발견할 수 있었습니다.
이런 비슷할 실수들 많이 하시나요? ^^;;;;;
(프로그램 많이 해보신 분은 딱 보이겠지만, 저 같이 어설픈 놈은 1시간 헤맨답니다...ㅜ.ㅜ)
Forums:
stdout 에 잘쓰셨네요..
stdout 에 잘쓰셨네요..
----------------------------------------------------------------------------
한참 보다가 안보여서 붙여넣기 하고 diff 돌렸습니다 ;;
한참 보다가 안보여서
붙여넣기 하고 diff 돌렸습니다 ;;
그럴 경우는 코드를 좀 길게 쓰는게 최선책 아닐까요...
KISS 라는 말이 생각 나는군요(Keep It Simple and Stupid)
예전에 그런 문서를 본것도 같은데...어디였는지는 기억이 안나는군요..;;
----
자신을 이길 수 있는자는
무슨짓이든 할수있다..
즉..무서운 넘이란 말이지 ^-_-^
나? 아직 멀었지 ㅠㅠ
[code:1]for(i = 0; i < 10; i++
위의 코드때문에 몇시간 정신못차린적도 있습니다.
가장 황당한 경우는 ...if (fp = NULL) {..
가장 황당한 경우는
...
if (fp = NULL) {
...
}
요즘이야 컴파일러가 알려주시면 예전은 안그랬죠.
그리고 GNU쪽에서 상수를 앞으로 돌려쓰는 형태로 코딩하자고 합니다.
상수는 lvalue가 되지 않기 때문에..
if (NULL == fp) {
...
}
screen + vim + ctags 좋아요~
숨은 그림 찾기군요...
kall 님이 diff를 돌렸다는게 이해가 가네요.
Do you think that's the air you are breathing now?
-.-
도대체 어디가 다른 건지 -.-
앗 찾았다. diff 안 돌리고...
세벌 https://sebuls.blogspot.kr/
음.. 두개를 비교하니까 쉽게 보이지 위에꺼만 있다면 찾기 쉽지 않겠네요
음.. 두개를 비교하니까 쉽게 보이지 위에꺼만 있다면 찾기 쉽지 않겠네요.. 1 시간 헤맬만 한데요 ㅋㅋ 더 헤맬지도........
hi 용
[quote="wooho47"]음.. 두개를 비교하니까 쉽게 보이지 위에
아래 코드는 원인을 발견하고 난 후 고친 것이니까 비교할 수 있는 것이지...
그 전에는 정말 왜 그런지.. 1시간을 족히 헤맸더랬습니다.....
자꾸 stdout 으로 나오니까 시스템적으로(?) 모든 파일 fd가 stdout으로
리다이렉션 설정되어 있진 않나? 하는 의심마저 들었다니까요...
어쨌든 이런 실수들로... 나름대로 얻은 교훈들도 있어서 좋네요..
[quote="김충길"]그리고 GNU쪽에서 상수를 앞으로 돌려쓰는 형
pynoos님 코딩을 본적이 있는데... 이렇게 사용하시더군요.
그때는 별 생각없이 지나쳤었는데, 이런 이유였군요. 좋은 tip 감사합니다.
우리 모두 리얼리스트가 되자. 그러나 가슴에 이룰 수 없는 꿈을 가지자
[quote]KISS 라는 말이 생각 나는군요(Keep It Simple
Keep It Simple, Stupid 로군요^^
저는 Practical C Programming 에서 봤었습니다:)
SOrCErEr
디버거를 돌리시지요...
디버거로 한줄한줄 trace하면 좀 더 빨리 찾으셨을꺼 같네요.
누구나 한번쯤은..
개발하시는 분들이라면 한번쯤은 다들 경험해봤을 일이네요..
한번 호되게 당하고나선 그런부분을 짤때 한번더 보게됩니다..
Ultraedit을 사용하는 친구는 괄호의 짝을 굵게 표시해줘서 그런건 안당한다고 하더군요.. ^^;
[quote="kall"]그럴 경우는 코드를 좀 길게 쓰는게 최선책 아닐
저는 아직 초짜라서 많이 모르지만, 코딩하는데도 사람마다 주관을 가지고 하게 된다 하지요... [퍼포먼스]를 최대한 고려하는 스타일, [재사용성]을 최대한 고려한 스타일, [코드 가독성]을 고려하는 스타일... 등등...
재학시절 1학년 때 과제로 string 라이브러리(strlen, strcat 등등..)를 직접 구현해보는 과제가 있었는데, 저는 그 때 어떻게 하면 가장 빠르게 가장 간소하고 짧게 코드를 짤 수 있을까를 고민하며 완성해 나아갔습니다.. 과제를 내고 강사님으로부터 피드백이 왔는데, 프로그래밍이라는 것은 간결함도 중요하지만, 책을 쓰듯이 쉽게 읽힐 수 있어야 함도 중요하다며 readability를 강조하셨던 기억이 떠오르네요...
실제로 첫 번째와 같은 코딩을 했다면 저 같은 실수를 예방할 수 있었을 것입니다.
하지만 이렇게 두 코드를 컴파일하여 역어셈 해본다면, (솔직히 이 예는 그다지차이를 보일만큼 복잡성 있는 코드는 아닙니다만 컴파일러가 좀 더 똑똑하다면 조금이라도 차이를 줄 수 있을 것 같네요...) 어떤 코드가 단 한줄이라도, 단 한 가지 연산이라도 늘어나게 될까요?
그리고 여러분들은 (물론 무엇을 코딩하느냐라는 상황에 따라 조금씩 다르겠지만) 주로 프로그램을 할 때 주로 어떤 주관과 신념을 가지고 임하시는지 궁금합니다.
performance critical한 경우가 아니라면가독성이 높은
performance critical한 경우가 아니라면
가독성이 높은 쪽이 좋잖을까요.
가독성을 해쳐야할 만큼 performance critical한 경우라면
거의 어셈블리로 코딩하게 되지 않을지요. :?
요즘 컴파일러들은 꽤 좋답니다. 믿으세요. 8)
..
이런 실수는 아니지만...
파이썬 처음 배울때, 인덴트때문에 고생했습니다.
No Pain, No Gain.
Re: 누구나 한번쯤은..
이클립스 유져들도 =3=33 역시나 흐흐흐흐
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
댓글 달기