생기지 않을 곳 같은 곳에 꼭 버그가 있다.
이건 절대 버그가 아니야 하고 믿었던 코드에 버그가 숨어 있다.
스스로 완벽하다고 믿었을 때, 버그가 있다. 자만심은 버그를 낳는다.
가장 간단한 if 문에서 조차 버그가 생길 수 있다.
다음은 내가 다른 사이트에서 적은 글이다.
------------------------------------------------------------------
C 에서 수학과 다른 의미를 가지는 기호가 있죠. 그 중 대표적인게 = , 와 == 입니다. 그래서 둘을 바꾸어 쓰기도 합니다.
#include <stdio.h>
void main(){
int a=1;
if( a= 2) printf( "a 는 2이다 ") ;
a=1;
if( a=! 2 ) printf( "a는 2가 아니다." );
}
이 건 잘못된 코드죠. 의도 한 대로 값이 나오지 않을 것입니다.
첫 번째 if 문은 a =2 라고 의도와 달리 대입연산을 했습니다. 그래서 if(2) 라는 것으로 인식하게 돼죠.
두 번째 if 문은 눈에 잘 안 띠지만 논리적인 버그가 있습니다. 잘 살표보세요.
=! 는 절대 하나의 연산이 아닙니다. 의도한 대로 고치면 != 라는 같지 않다는 하나의 연산을 해주어야 하니다. 따라서 저 식은 if(!2 ) -> if(0) 라는 의도하지 않은 식을 만들어 냅니다.
이를 쉽게 방지하는 방법으로
if( 2==a ) 라고 쓰기도 합니다. 이 경우 if(2 = a ) 라고 잘못사용하게 되면 error 를 유발하여 컴파일러가 알려주게 됩니다.
또, 한가지 방법을 warning 수준을 높이는 방법이 있습니다.
project -> setting 을 선택하면 대화창이 열림
c/c++ 탭에서 Warning Level 을 Level3에서 Level4 로 올리면 이 경우에는 warning 이 if 문에 대해 경고를 해주게 됩니다.
----------------------------------------------------------------
한가지 덧 붙이자면 gcc 에서는 -Wall 이라는 옵션으로 경고 수준을 가장 높이는 방법이 있다.
내가 처음으로 제대로 프로그램을 짜보게 된것은 숙제 때문이다. 진수변환 프로그램. (16진수까지 지원해야 한다.)
a 진법을 b 진법으로 변환하기 위해서는 간단히
a진법 -> 10진법 -> b 진법으로 변환하면 된다. 그리고 그 방법은 수학적이다. (물론 프로그램을 처음 만들 때는 수학적인 것 그대로 구현하는 것도 꽤 고통스럽다. while 한 번 사용하는 법 몰라, 인터넷을 뒤지고, 다녀야 한다. )
가장 고생한 부분은 16진수 표현을 어떻게 해야 하는가이다. 어떻게 10 이라는 값을 a 로 변환 할 것인가이다. 이런 걸로 고생많이했다. 지금 생각해 보면 배열사용하면 된다. 너무나 당연하다. 좀 다르게 구현 할려면 간단한 if 문 정도. 내 기억으로는 난 switch 문을 사용한 것 같은데.
난, 그때 너무 고지식했는지 배열사용하면 메모리까 조금 낭비되니까, 메모리 효율을 최적으로 꼭 만들어야 한다고 생각했다. (사실 코드가 길어지면 메모리가 더 낭비되는데.)
프로그램을 처음 만드는 사람들은 이런 식의 생각을 가지게 된다.
완전 무결하고, 메모리 사용이 최적이어야 하고, 속도도 가장 빠르게 만드는 방법을 찾아 할려고 한다. 그렇게 만들면 고생 심하게 하는데, 그러다 프로그래밍이 어렵다고 하면서 그만 둔다.
프로그램을 처음부터 완전 무결 할 수는 없다. 더구나 처음 만드는 사람이..
내가 그 때 만든 프로그램을 다시 보면 정말 재미있을 것이다. 라이브러리에 있는 함수인지도 모르고 함수 만들어 사용하고...
네이버 지식검색을 이용하다 보면, 게시판에
#include
를 선택하다보면 웹에서 < 가 표현이 안되어 짤리는 경우를 볼 수 있다. 내가 그래서 네이버에 메일을 보내 봤다..
-----------------------------------------------------------------
질문제목 : 텍스트로 글쓰기 할때.
접수시각 : 2004년 04월 04일 12:10:57
프로그래밍 쪽 질문이나 대답을 할 때
#include
처럼 <
(꺽쇄괄호, 부등호기호) 를 이용하는 경우가 많습니다. 그런데, 그럴 때 마다 그 쪽이 짤립니다.
HTML 로 글쓰기 할 때 없어지는 것은 당연하다고 생각하는데, 텍스트쪽은 변환해서 보여주어야 한다고 생각합니다.
이게 안되면, 프로그래밍 게시판은 좀 많이 불편하거든요.
지식iN 운영자입니다.
소스를 사용하여 답변을 하실 때에는 웹에디터를 사용하실 것을 권유드립니다. 텍스트로 소스를 작성하실 때에는 C 소스코드 중에 html 태그로 인식하는 부분이 생겨서, 본문이 의도했던 바와 다르게 보여질 수 있기 때문입니다.
참고로 텍스트를 작성하실 때에는 < 는 & l t ; 로, > 를 & g t ; 로 바꿔쓰시면 소스는 깨지지 않습니다.
고맙습니다.^^
----------------------------------------------------------------
돌아 온 대답이 별로 마음에 들지 않는다.
지식검색을 보니, php 로 이루어진 것 같다. 보통, 무료로 제공하는 서비스는 php와 mysql 로 이루어 지기 마련이다.
어째든, php 에 htmlspecialchars 라는 함수가 있다. 메뉴얼에 보면 '&' (ampersand) becomes '&'
'"' (double quote) becomes '"'
'<' (less than) becomes '<'
'>' (greater than) becomes '>'
라고 써 있다. 이런게 부하가 많이 걸리는 것 같다. 한 한시간이상 부하가 걸리는 거 같다. 안그래서야 이 네이버사이트에서 이 함수를 안 이용할 이유가 없지 않은가..
덧 글 : 이젠 블로그도 이글루로 옮겼으니 지식검색을 이용할 일이 적어 질 것 같군.