Endian

Programming/OS Development 2009. 9. 14. 00:38

Big endian 과 little endian 이 있다. 이는 컴퓨터 메모리에 저장된 바이트들의 순서를 말한다.
Big endian 은 바이트열에서 가장 큰 값이 먼저 저장 되고,
Little endian 은 가장 작은 값이 먼저 저장된다.

"0x12345678" 라는 값을 저장 할 때 Big endian 일 때는 12345678 이라고 저장을 하고,
Little endian 일 때는 78563412 라고 저장을 한다.

12 가 높은 주소, 78 이 낮은 주소이다.
2진수 계산시에 제일 뒷 부분이 0승이 라는 것을 생각하자. ㅎㅎ 

'Programming > OS Development' 카테고리의 다른 글

DMA & PIO  (0) 2009.09.23
클러스터( Cluster )  (0) 2009.09.23
RGB 256 Color 색상표  (0) 2009.08.03
RGB 색상 코드 표  (2) 2009.07.19
NASM - 3  (0) 2009.06.29

설정

트랙백

댓글

vi / vim 단축키 모음

Programming/Linux 2009. 9. 10. 03:58

'Programming > Linux' 카테고리의 다른 글

Vi 편집기  (0) 2009.09.19
Virtual Box 게스트 확장 설치  (0) 2009.09.15
리눅스  (0) 2009.03.25
1. Red Hat Linux 5 - basic instructions ①  (0) 2009.03.23
1. Red Hat Linux 5 - basic instructions ①  (0) 2009.03.23

설정

트랙백

댓글

뉴욕의 프로그래머

Programming 2009. 9. 4. 21:15

뉴욕의 프로그래머.. 그리고 노란색 표지가 눈에 띄는 책이 었다.

책은 한국인 프로그래머의 관점에서 주로 이야기가 전개 되었다.

내용은 한국인 프로그래머가 외국에서 일을 하면서 겪는 것을 중점으로 진행이 된다.

주변의 우수한 프로그래머에 대한 이야기, 최악의 프로그래머, 버그 잡는 일,

어떤 시스템에 대한 이야기.. 프로그래머가 읽기에 친숙한 내용들이 었다.

그리고 처음 보는 용어나 아! 이런 식으로 하는구나! 하는 등의 프로그래밍을 하는데 있어서 좋은 정보를 많이 제공해 주었다.


개발하는데 있어서 시스템의 설계나 패턴을 이용하는 것이 얼마나 중요한지에 대해 항상 강조하고 있는 분위기로 내용이 진행 되었다.

그리고 그로 인한 많은 문제들을 보여주었고, 특히 숲을 보지 않고, 나무만을 보고 있을 때 문제의 심각성에 대해 알려주었다.

아직은 학생의 신분 이여서 프로젝트라 해봤자 적당히 기능이 수행되고, 잘 뻦지 않는 정도로 짜면 되기 때문에 이런 것을 아직

몸소 체험을 해보지는 않았지만 현업에 가기전에 1년 정도 밖에 남지 않았지만, 그 기간 동안 이라도 특별한 기술도 중요하지만

숲을 보는 시야를 가져야 할 것 같다. 일단 프로젝트를 진행하기 전에 명세서, UML 을 꼭 한번 그려보고 꼼꼼히 살펴보는

습관이 중요한 것 같다. 특히 나는 항상 이런 이런 식으로 짜면 되겠지 하고, 종이에 끄적이긴 하지만 금방이다... 하지만

개발을 하다 중반정도 가게 되면 처음 생각했던 것 만큼이나 일이 더 생기게 되고 나중에 되면 내가 소스를 해깔릴 정도로

구조가 복잡해 지기 일수 였다. 그리고, 디자인 패턴, 리팩토링, 이펙티브 C++ 을 알아둬야 할 것 같다. 흠.. 다 중요하지만

일단은 이런 책들을 보면서 좀 더 시야를 넓혀 가고.. 기본적인 코딩 스타일 과 협업 하는 방법에 관련 된 책을 한번 찾아봐서

읽어 봐야 할 것 같다. 다른 팀들은 보니 변수 선언 법이나 등등 협업과 관련해서 문서를 남기고, 프로젝트를 하기 위한 공동의

공간을 두고, 서로의 일정을 항상 알고 토론하는 등 시스템이 잘 구축되어 진행이 되어 가는 것 같았다. 불행히 아직까지 나는

그런 경험을 제대로 못해 본 것 같아서 걱정이다. 항상 혼자 코딩하는 것을 편해 했기 때문이다... 큰 프로그램이 아니더라도

체계적으로 시스템을 구축해서 프로그래밍을 해보고 싶다. 그러기 이전에 내가 먼저 적극적으로 공부를 해야 될 것 같다.

공부도 공부지만 개발자 라면 자신의 의견을 굽힐 줄 알고, 남의 의견을 존중하는 것이 꼭 필요한 것 같다.

책에서도 나오지만 정말 남들이 전혀 알아 볼 수 없도록 스파게티 소스 를 짜놓거나 그리고 다른 사람이 이건 잘못 되었다고

했을 때도 무조건 고집만을 피우며 귀를 틀어 막는 개발자가 최악의 개발자 인 것 같다. 실력은 부족하지만 남의 의견을 존중하고,

그것으로 배운다면 큰 발전의 가능성을 가지고 있으며 배움의 자세를 갖추었다고 할 수 있지만, 자신의 편견에 사로 잡혀서 혼자

고집을 피우는 사람은 절대 발전을 할 수 없다. 이 세상에는 수많은 개발자가 존재 하고 그리고, 내 위에 수많은 뛰어난 개발자가 많이 있다.

아무리 자신이 미친듯이 해서 공부를 했다 하더라도, 선천적으로 머리가 좋아 남들 보다 훨씬 앞을 보고 개발을 하는 프로그래머들이

수두룩하다. 얼핏 보기에 나보다 못하는것 처럼 보이지만 나에게 없는 다른 장점이 있을 수도 있다. 항상 겸손하고, 배우는 자세를 가지고

프로그램을 해야 할 것 같다. 그리고 잘못 된 것을 꼬집어 주는 사람에게 항상 고마워하는 마음을 가져야 할 것이다. 책에 보면 한 남자가

회사에 가서 개발을 하는데 입사 한지 얼마 되지 않아 버그를 하나 수정하라는 명령이 떨어지고 그 개발자는 시스템을 제대로 이해하지

못해 걱정을 했지만, 버그를 보고 단순한 것으로 생각하고 전체 시스템의 흐름은 생각지도 않은체 그 버그 난 부분만을 생각하고,

금방 버그를 고치게 된다. 하지만 곧 그 실수는 시스템의 치명적인 버그로 남게 되고, 회사에 큰 손실을 가져다 준다. 그리고, 그 개발자는

자책을 하며 일을 그만두어 버린다. 주변의 프로그래머는 그를 보고 꾸짖기 보다는 많은 실망을 하게 된다. 어떤 뛰어난 프로그래머든

실수는 하기 마련이다. 어떤 천재라도 말이다. 그리고 사람이 만든 프로그램이기 때문에 어떤 프로그래머든 버그는 있기 마련이다.

Window조차 정말 수 많은 버그를 가지고 있지 않은가. 잘 생각해 보면 우리가 사용하는 프로그램들 중에 버그가 없는 프로그램이 없다.

메신저나 동영상 플레이어 등 갑자기 꺼진거나 전달이 안되거나 등 정말 많은 버그를 가지고 있다.

실수를 못견뎌하고 두려워 하는 사람은 실수로 부터 아무 것도 배우지 못하는 사람 만큼이나 성장 가능성이 없다.

나날이 성장하는 사람은 실수를 두려워 하지도 거부 하지도 않는다. 실수는 고통을 안겨주지만 성장하는 사람은 그것을

자신의 일부로 끌어안고 실수와 함께 나아간다

라고 책에서 언급하고 있다. 실패는 성공의 어머니라는 말도 있지 않은가.. 이 말을 항상 염두해 두고, 자신을 자책하지 말아야 할 것이다.

하지만 그렇다고 해서 버그를 너무 당연시 여기거나 나태해지면 안 될 것이다 항상 배우도록 해야 할 것이다.

마지막으로 이 책에서 가장 인상 깊었던 말이 있었다.

지난 37년 동안 나는 하루에 14시간씩 연습을 했다. 그러고 났더니 사람들은 나를 천재라고 부르더라.

라는 말이다. 그렇다.. 어떤 천재라도 노력하지 않는 천재가 없다는 것을.. 그리고 누구든 노력하면 천재처럼 될 수 있다는 것을..

항상 부단히 노력하는 사람이 되도록 해야겠다.

 

 

아래의 내용은 책을 읽으면서 찾아볼 만한 내용. 또는 괜찮은 내용

디자인 리뷰, 코드리뷰, 유닛테스트

 

GUI컴포넌트들에 대한 관찰자( observer )를 생성해서 맵(map)에 저장하는 부분을 포함하고 있었다.

 

기능 뿐만 아니라 성능이나 메모리 용량 같은 부분도 정확히 따져가면 프로그래밍을 해야 한다.

 

버그를 바라보는데 두종류의 사람이 있다.

첫번째는 시스템이 동작하는 방식을 정확하게 이해하고, 전체적인 측면을 사용자 입장에서 차분하게 바라보는 사람이 있는가 하면,

매우 근시안적인 시각을 가지고 눈앞에서 벌어지는 일에만 집착하는 사람이 있다.

 

패어 프로그래밍( pair programming )

 

코딩이 끝나는 시점은 소스코드의 변경이 끝나는 시점이 아니라 자신의 코드를 확인하기 위한 유닛테스트 코드의 작성이 끝나고,

요구사항이나 버그 리포트에 적힌 내용을 한 줄 씩 확인하면서 철저하게 기능적 테스트를 수행하고, 필요한 부분이 있으면 다시 한 번 수정하고,

최종적으로 코드 리뷰가 끝나는 시점을 의미한다.

 

감각적인 의미에서 성능을 향상 시킨다는 의미는 어떤 동작이 수행되고 결과가 돌아오는데 걸리는 시간은 같지만

마우스가 화살표 모양으로 바뀌고, 프로그레스 바가 움직이고, html코드가 받은데로 순차대로 뿌려주게 되면

사용자는 덜 지루함을 느끼게 된다. 만약, 결과가 나올때 까지 그저 흰 그림만을 계속 보고 있어야한다면

사용자는 손톱을 깨물며 그저 기다리기만 해야한다.

 

 

익스트림 프로그래밍 : 불필요한 절차의 과감한 생략을 통해서 프로그래머와 사용자 사이에서 빠르고 정확한

의사소통이 일어나도록 할 것을 강조하는 소프트웨어 프로젝트의 한 방법론. 보통 XP 라 부름.

 

 fail-fast : 한 쓰레드가 iterator를 이용해서 데이터를 읽어나가는 동안 다른 쓰레드에 의해서 구조 변경이 되는 상황이

        발생 이때 iterator는 concurrent exception 을 발생

 

IntelliJ IDE : 이클립스, 넷빈즈와 함께 자바 프로그래머들이 가장 많이 사용하는 통합개발환경의 하나.

www.jetbrains.com/idea/

 

getList와 같은 메쏘드를 작성 할 때는 참조가 아니라 복사본을 리턴 하는 것이 기본

그렇지 않으면 캡슐화가 전혀 지켜지지 않게 되고 직접 데이터의 변형이 가능하다.

 

명령어 패턴( command pattern )

 

자신의 일에 열정을 가지고 하고 겸손. 상대방의 말을 중간에 끊지 말고 충분히 말할 시간을 주고 상대의 생각을 다 듣고 자신의 의견을 밝힌다.

 

"프로그래밍 펄 " 책.. 해커와 화가들....

 

유닛테스트 unit test 프레임 워크

 

client -> server  10초마다 ping message를 전달

메세지를 받은 서버는 클라이언트의 세션 객체가 가지고 있는 시간(timestamp)값을 현재 시간으로 업데이트

한다음 client에게 응답을 보낸다.

server는 ping message 가 6번 이상 연속적으로 실패하면 네트워크가 다운되었다고 간주하여

client 는 자동 로그아웃.

 

버그가 발생하면 버그의 내용을 신중히 생각하여 판단하라. 지레 짐작으로 코드를 변경하지 마라.

 

 

이 글은 스프링노트에서 작성되었습니다.

'Programming' 카테고리의 다른 글

serialize ( 직렬화 )  (0) 2010.03.22
시리얼 통신  (0) 2009.10.19
[Network]슬라이딩 윈도우( Sliding window )  (0) 2009.09.04
IP 주소 변경하기  (0) 2009.08.21
[도서] 임베디드 프로그래밍 C 코드 최적화  (0) 2009.08.12

설정

트랙백

댓글

[Network]슬라이딩 윈도우( Sliding window )

Programming 2009. 9. 4. 00:44

슬라이딩 윈도(Sliding window)는 두 개의 네트워크 호스트간의 패킷의 흐름을 제어하기 위한 방법이다.

TCP와 같이 데이터의 전달을 보증하는 프로토콜에서는 패킷 하나하나가 전달되었음을 확인 신호(acknowledgement, 이하 ACK)를 받아야하며, 만약 패킷이 중도에 잘못되었거나 분실되어 확인받지 못하는 경우, 해당 패킷을 재전송해야하는 필요가 있다. 슬라이딩 윈도는 일단 '윈도(메모리 버퍼의 일정 영역)'에 포함되는 모든 패킷을 전송하고, 그 패킷들의 전달이 확인되는대로 이 윈도를 옆으로 옮김(slide)으로서 그 다음 패킷들을 전송하는 방식이다.

슬라이딩 윈도는 아직 확인을 받지 않고도 여러 패킷을 보내는 것을 가능케 하기 때문에, 매번 전송한 패킷에 대해 확인을 받아야만 그 다음 패킷을 전송하는 방법(stop-and-wait)을 사용하는 것보다 훨씬 네트워크를 효율적으로 사용할 수 있다.

설명

일단 전송되는 패킷들에겐 일련번호(sequence number)가 매겨지게 된다. 가령 전송하고자하는 n개의 패킷이 있다고 하면 [1, 2, ..., n]와 같이 일련번호를 매길 수 있다.

송신자(sender)는 다음의 세 가지 변수를 관리한다.

  • SWS (send window size) - 윈도 크기
  • LAR (last acknowledgement received) - 마지막으로 확인받은 패킷의 번호
  • LFS (last frame sent) - 마지막으로 보낸 패킷의 번호

그렇다면 송신자의 윈도는 [(LAR+1), ... , (LAR+SWS)]가 된다. 송신자는 이 윈도에 포함되는 모든 패킷들을 전송하고, 수신자로부터 ACK가 올때까지 기다린다. LFSLAR+SWS가 된다. 아무 문제가 없었다면 수신자로부터 LAR+1ACK를 가장 먼저 받게 된다. 그렇다면 송신자는 LAR을 갱신하고, 그렇게되면 LAR+SWS도 그만큼 증가하기 때문에 그 다음 패킷을 보낼 수 있게 된다.

또 만약 어느 패킷에 대해 ACK를 받지 못한 경우, 송신자는 일정시간을 기다린 후, 확인받지 못한 패킷을 재전송한다. 이미 현재의 윈도에 해당되는 패킷을 모두 보냈는데 ACK를 받지 못해 윈도를 이동시키지 못하고 있다면 필요한 ACK가 오기까지 기다려야 한다.

수신자(receiver)도 윈도를 따로 운용한다. 수신자는 다음의 세 가지 변수를 관리한다.

  • RWS (receive window size) - 윈도 크기
  • LAF (last acceptable frame) - 수신할 수 있는 마지막의 패킷의 번호
  • LFR (last frame received) - 마지막으로 수신한 패킷의 번호

송신자와 비슷하게 수신자도 LAFLFR을 갱신하여 윈도를 이동시키며 패킷들을 접수한다. 받는 패킷들에 대한 ACK를 보내주는 것이 수신자의 역할이다. 수신자가 보내는 ACK는 마지막으로 도착한 패킷에 대한 ACK가 아니고, 연속적으로 도착한 패킷중의 가장 마지막 패킷에 대한 ACK이다. 예를 들어 1, 2, 3, 4, 6, 7의 패킷이 순서대로 도착하였다면, 수신자는 그 7번의 패킷을 받아 버퍼에 저장하고, 4번의 패킷에 대한 ACK를 송신자에게 보낸다. 만약 그 다음에 도착하는 패킷이 5번이라면, 수신자는 그제서야 7번의 패킷에 대한 ACK를 송신자에게 보내게 된다.

만약 윈도에 포함되지 않는 패킷이 도착하면, 수신자는 단순히 이 패킷을 버린다.

결론적으로 데이터의 전송이 되는 동안 아래의 두 가지 부등식이 항상 성립하여야한다.

네트워크의 상황에 따라 송신자나 수신자는 각자의 윈도 크기(SWS, RWS)를 조절할 수도 있다.

출처 : http://ko.wikipedia.org/wiki/%EC%8A%AC%EB%9D%BC%EC%9D%B4%EB%94%A9_%EC%9C%88%EB%8F%84 위키백과

'Programming' 카테고리의 다른 글

serialize ( 직렬화 )  (0) 2010.03.22
시리얼 통신  (0) 2009.10.19
뉴욕의 프로그래머  (0) 2009.09.04
IP 주소 변경하기  (0) 2009.08.21
[도서] 임베디드 프로그래밍 C 코드 최적화  (0) 2009.08.12

설정

트랙백

댓글

라디오 버튼 그룹지정 하기

Programming/Windows Programming 2009. 8. 22. 01:05

라디오버튼 컨트롤을 선택한 상태에서 속성창을 보면 Group 설정하는게 있다

true 나 false 둘 중 하나를 선택 할 수 있다. 3개 2개 의 라디오 버튼을 각각 그룹화 한다고 해보자.

이 때 각 그룹의 첫 번째 라디오버튼의 속성에 있는 Group 를 true 로 설정해주면 라디오버트 ID값을

기준으로 처음 true 속성을 가진 라디오버튼 부터 다음 true를 가진 라디오 버튼이 나올때 까지 사이

의 ID값을 기준으로 그룹을 나눈다.

// 그룹1
radio1    true
radio2    false
radio3    false

// 그룹2
radio4    true
radio5    false

'Programming > Windows Programming' 카테고리의 다른 글

Editbox 설정  (0) 2009.09.26
컨트롤 변수 사용( Value )  (0) 2009.09.22
IP HELP API 설정하기  (0) 2009.08.22
[MFC] 더블 버퍼링  (0) 2009.06.22
[MFC] Bitmap Object  (0) 2009.06.07

설정

트랙백

댓글

IP HELP API 설정하기

Programming/Windows Programming 2009. 8. 22. 00:30

먼저 #include <iphlpapi.h> 해준다.

그리고 include file directory 에는 C:\PROGRAM FILES (X86)\MICROSOFT SDKS\WINDOWS\V5.0\INCLUDE 와 같이 X86 계열 폴더로 명시해준다.

lib directory 에는 C:\PROGRAM FILES\MICROSOFT SDKS\WINDOWS\V6.0A\LIB
으로 x86이 아닌 폴더로 명시

개발 환경 : Windows 7

아마 윈도우 7 64비트용 운영체제 때문에 계열을 신경써서 인클루드를 해야하는 것 같다.
그렇지 않으면 신경쓰지 않고, include와  lib 폴더만 잘 명시해주면 될 것 같다.

'Programming > Windows Programming' 카테고리의 다른 글

컨트롤 변수 사용( Value )  (0) 2009.09.22
라디오 버튼 그룹지정 하기  (0) 2009.08.22
[MFC] 더블 버퍼링  (0) 2009.06.22
[MFC] Bitmap Object  (0) 2009.06.07
[MFC] GDI( Graphics Device Interface )  (0) 2009.06.07

설정

트랙백

댓글

IP 주소 변경하기

Programming 2009. 8. 21. 09:55
실제 커맨드 상태에서 변경하는 방법은 아래와 같습니다.

netsh interface ip set address "로컬 영역 연결" static/dhcp ipaddr subnetmask gateway metric

ex)  * DHCP 의 경우 
        -
netsh interface ip set address "로컬 영역 연결" dhcp
      * 고정  IP의 경우 

        - netsh interface ip set address "로컬 영역 연결" static        192.168.0.2         255.255.255.0      192.168.0.1     1  (게이트웨이까지 도달거리니까. 1이 기본)

참고, 현재 인터페이스 상태를 보고 싶을 때
      - netsh interface ip show address

대부분은 netsh [하위 명령어] /? 하면서 따라가면 명령어의 사용법에 대해서 알 수 있다.

'Programming' 카테고리의 다른 글

serialize ( 직렬화 )  (0) 2010.03.22
시리얼 통신  (0) 2009.10.19
뉴욕의 프로그래머  (0) 2009.09.04
[Network]슬라이딩 윈도우( Sliding window )  (0) 2009.09.04
[도서] 임베디드 프로그래밍 C 코드 최적화  (0) 2009.08.12

설정

트랙백

댓글

#include 와 #define 의 순서

Programming/C Language 2009. 8. 18. 23:08
#include 를 먼저 쓰고 #define 을 사용 하도록 한다.

#include <Turboc.h>
#define lpText "매크로"

void main()
{
   MessageBox( NULL, lpText, ~~ );
}



이 때 #define을 #include 위에 먼저 쓰게 되면 에러가 발생 한다. 그 이유는 MessageBox의 원형을 보면 MessageBox( HWND hWnd, LPCSTR lpText, ~ ); 으로 되어 있는데 두번째 인자가 lpText로 매크로 정의 한 것과 같다. 그래서 #define을 먼저 쓰게 되면 함수 원형의 lpText도 매크로로 치환이 되서 에러가 발생하게 된다.

출처 : www.winapi.co.kr

'Programming > C Language' 카테고리의 다른 글

#if  (0) 2010.05.27
구조체 정렬  (0) 2009.09.27
매크로 함수  (0) 2009.08.18
코딩 스타일  (0) 2009.08.15
#ifndef ~ #define ~ #endif  (0) 2009.08.15

설정

트랙백

댓글

매크로 함수

Programming/C Language 2009. 8. 18. 23:02
매크로 함수 호출문에서는 ++, -- 등의 증감 연산자나 +=, *= 등의 복합 대입 연산자는 쓰지 않는 것이 좋다.


#define dubae(i) ((i)+(i))

void main()
{
   int k,j;
   k = 3;
 
   j= dubae(k++);
}


이라고 쓰게 되면 j에는 6이 출력 되고, k는 5가 된다. 왜냐하면 매크로 함수를 호출하게 되면
( (3++) + (3++) ) 로 치환이 되기 때문이다.



#define abc()\
{ a();\
   b();\
   c(); }


매크로가 길 경우에는 \ 를 써서 여러줄로 쓸수 있다.


#define VALUE 1000
#define VALUE2 VALUE+100


이때 VALUE2 * 2 를 하게 되면 결과는 .. 2200 이 나올까? 그렇지 않다. 결과는 1200 이다.
그 이유는 VALUE2 가 VALUE+100 으로 치환되어서 VALUE+100*2 가 되어서 결과는 1200이다.
이런 경우  ( VALUE + 100 ) 로 묶어 주어야 한다.


출처 : www.winapi.co.kr

'Programming > C Language' 카테고리의 다른 글

구조체 정렬  (0) 2009.09.27
#include 와 #define 의 순서  (0) 2009.08.18
코딩 스타일  (0) 2009.08.15
#ifndef ~ #define ~ #endif  (0) 2009.08.15
헤더파일과 소스파일  (0) 2009.08.02

설정

트랙백

댓글

코딩 스타일

Programming/C Language 2009. 8. 15. 18:08
버그가 생기지 않는 코딩 습관

1. 하나의 지역 변수를 여러 용도로 사용하지 말 것

2. 함수의 인자를 다른 목적으로 이용하지 말 것

3. malloc() 과 free()는 서로 가까이 둘 것
   - malloc()에 대응하는 free() 의 대응 관계가 명백하게 보이도록 소스코드를 작성하는 것이 좋다.
     초기화 함수에서 malloc()으로 메모리를 할당한다면, 종료 처리 함수를 두어 free() 하는 코드를 작성

4. 구조체는 생성과 동시에 초기화하라
   - 구조체에 메모리의 할당과 멤버초기화 하는 함수를 두는 것이 좋다.
   - 구조체의 초기화는 memset 을 사용 struct pointer *p; memset( p, 0, sizeof( *p ) );
      주의 : sizeof( p ) 를 사용할 경우 4바이트 만 초기화 됨

5. 포인터는 NULL 로 초기화 하라

6. 점검하기 쉬운 스타일을 취할 것
    int get_x_value( const struct point *p          ) ~;
    int set_x_value(          struct point *p, int x  ) ~;


버그가 발생했을 때 대처하기 쉬운 코딩 스타일

1. 반납한 포인터는 NULL로 리셋
    - 반환한 메모리에 접근해서 프로그램이 죽는다. ( OS에서 잘못된 참조 오류가 발생하여 프로세스가
      중단 or 시스템이 중단 되도록 고안 )
    - 해제 이전에 메모리 체크 ( 이와 같은 스타일은 항상 일관되게 작성 하도록 한다 )
    if( p->name )
       free( p->name );
    else
       fprintf( stderr, "p->name is NULL.\n");

2. 함수의 앞부분에서 인자를 검사할 것
    - 각 인자가 NULL 인지 체크하기


추격을 위한 코딩 스타일


1. 함수는 가급적으로 한 줄에 다 적어라
- 함수가 길어질 경우,함수 선언을 여러줄에 나누어 쓰게 되는데 grep로 검색할 경우 한 줄 씩 보여주므로
  함수의 원형을 한번에 볼수 없다.


수정과 확인이 쉬운 코드
1. 중괄호를 생략하지 말 것

2. return을 한 군데로 몰아둘 것
   func()
   {
      int return_value;
      return_value = -1;
      return (return_value);
    }
    와 같이 중간에 여러 조건 검사가 있고 return을 해야 할 경우 return value 값을 바꿔주기만 하고
    함수마지막에 이를 호출 할 것

'Programming > C Language' 카테고리의 다른 글

#include 와 #define 의 순서  (0) 2009.08.18
매크로 함수  (0) 2009.08.18
#ifndef ~ #define ~ #endif  (0) 2009.08.15
헤더파일과 소스파일  (0) 2009.08.02
모듈화 프로그래밍 - 2  (0) 2009.06.28

설정

트랙백

댓글