본문으로 바로가기
homeimage
  1. Home
  2. 컴퓨터/컴퓨터 이야기
  3. 버그를 없애기 위한 C 프로그래밍

버그를 없애기 위한 C 프로그래밍

· 댓글개 · 바다야크

버그를 없애기 위한 C 프로그래밍

아래에 간단한 C 프로그램이 있습니다. 버그가 하나 숨어 있는데, 보이시나요? 프로그램을 컴파일해 보면 아무 이상이 없고, 에러 없이 실행되지만 엉뚱하게 행동합니다.

#include <stdio.h>         // printf()
#include <string.h>        // strlen()
#include <fcntl.h>         // O_WRONLY
#include <unistd.h>        // write(), close()

int main() {
    char  *temp = "badayak.com";
    int    fd;
    
    fd = open( "./test.txt", O_WRONLY ¦ O_CREAT ¦ O_EXCL, 0644);
    if ( fd = -1){
        printf( "파일 열기에 실패했습니다.n");
    }
    else{
        write( fd, temp, strlen( temp));
        close( fd);
    }
    return 0;
}

혹시 아시겠습니까? 네, 맞습니다. fd 값이 -1인지 확인하는 if 절이 잘못되었습니다. 올바르게 고친다면 fd = -1 이 아니라 fd == -1 이 되어야 합니다. C 언어를 사용하다 보면 흔하게 겪는 에러인데, 컴파일할 때에도 걸러지지 않기 때문에 if 절에서 = 를 사용할 때면 매우 조심합니다.

시력의 실수

너무 당연한 문장은 모두 읽기도 전에 다음 문장으로 이동하기 때문에 더욱 보이지 않을 때가 있습니다. 혹 아래의 문장을 아시나요?

캠릿브지 대학의 연결구과에 따르면, 한 단어 안에서 글자가 어떤 순서로 배되열어 있는가 하것는은 중하요지 않고, 첫째번와 마지막 글자가 올바른 위치에 있것는이 중하요다고 한다. 나머지 글들자은 완전히 엉진창망의 순서로 되어 있지을라도 당신은 아무 문없제이 이것을 읽을 수 있다. 왜하냐면 인간의 두뇌는 모든 글자를 하나 하나 읽것는이 아니라 단어 하나를 전체로 인하식기 때이문다.

글 내용이 이상하죠? 이상하지 않나요? 이상한 점을 못 보셨다면 글을 다시 한 자 한 자 다시 보세요. 이제 이상한 것이 보이시나요?

이렇게 눈으로 언뜻 보면 제대로 인식하지 못하는 경우가 있습니다. 그러다 보니 매우 긴 프로그램 소스를 보다 보면 if 절의 == 비교가 = 로 오타를 해도 나중에 이것이 보이지 않아 고생하게 되는 것이죠.

파스칼에서 대입문은 :=

처음 파스칼을 입문했을 때, 대입문을 := 로 한 것을 보고, 파스칼 언어를 만든 사람의 세심한 배려에 감탄합니다. 대입은 := 이지만 두 개의 값을 비교할 때에는 = 를 사용합니다. 그러므로 C에서와 같이 오타를 해도 컴파일러에 의해 에러를 검출해 냅니다.

저는 그래서

이런 경험을 하고부터는 상수를 항상 오른쪽이 아닌 왼쪽에 두는 버릇이 생겼습니다. 즉, 아래와 같이 상수를 오른쪽에 두는 것이 아니라,

if ( fd = -1)

이렇게 왼쪽에 둡니다.

if ( -1 = fd)

이렇게 상수를 왼쪽에 두면, == 를 = 로 오타로 입력했다 해도 컴파일 에러가 발생하여 버그를 미리 잡아낼 수 있습니다. 이런 이유 때문에 == 말고도 다른 비교에서도 모두 상수는 왼쪽에 두는 버릇이 생겼습니다. ^^

'컴퓨터 > 컴퓨터 이야기' 카테고리의 다른 글

WOL을 이용한 원격데스크톱 연결  (28) 2008.07.29
14일과 3년  (9) 2008.07.04
컴퓨터 프로그래밍 언어 학습 방법?!  (49) 2008.06.14
SNS 공유하기
💬 댓글 개
최근글
이모티콘창 닫기
울음
안녕
감사해요
당황
피폐

이모티콘을 클릭하면 댓글창에 입력됩니다.