Public/tip & tech 122

const

변수를 상수로 만들고자 할때 즐겨 사용하는 키워드가 const 이다. const char *MSG = "ERROR"; 이와 같은 형태로 사용하는데 제대로된 순서로 적을려면 char const *MSG = "ERROR"; 이다. 물론 처음 적은 것이 틀렸다는 의미는 아니고 const 연산자의 특성을 이해하기 위해서는 두번째 방법으로 적는것이 이해하는데 통일성이 있어서 유리하다는 의미이다. const 연산자는 좌측 즉 왼쪽에 오는 것들에 영향을 미친다. char const *p 는 상수문자열를 가르키는 일반 포인터이고 char *const p는 일반문자열을 가르치는 상수 포인터이다 상수 문자열은 수정이 불가능한 문자열을 의미하고 일반 문자열은 수정이 가능한 문자열이다. 그리고 일반 포인터란 가르키는 대상이 ..

Public/tip & tech 2009.05.12

[c언어] volatile

volatile 지금까지 프로그램을 하면서 한번도 사용해 본적이 없는 키워드이다. 그럼 언제 사용하는가 ? c프로그램은 컴파일 언어이기 때문에 c코드를 컴파일하게 된다. 이때 컴파일을 담당하는 컴파일러가 코드 수행의 성능 향상을 위해서 최적화를 하는데 이런 최적화를 못하도록 컴파일러에게 명시적으로 알려주는 키워드가 volatile이다. 어떤 변수가 있고 이 변수가 루프를 끝낼지 말지를 결정하는 변수일때 컴파일러가 이 변수는 메인메모리에서 읽어오지 않고 처음 로딩후 로컬 레지스터에 저장한후 다음부터는 이 로컬레지스터에서 읽어오게 되면 메인메모리에 변경된 값이 적용되지 않는 경우가 발생하여 프로그래머가 예상했던 동작과 다르게 동작할 수 있다. 보통(single 프로세스)의 프로그램환경에서는 발생하는 일이 없..

Public/tip & tech 2009.05.12

내가 해보고 싶은 분산 컴퓨팅

컴퓨터 하드웨어가 아무리 빨리 발전한다고 해도 사람의 욕심을 채우긴 영원히 힘들것이다. 15년전과 비교해서 컴퓨터가 눈부실 정도로 좋아졌지만 아직도 성능에 만족하는 사람은 그리 많지 않은것 같다. 나같이 데이터를 다루는 사람이라면 발전하는 컴퓨터 성능보다 몇 배로 늘어나는 데이터를 보며, 그저 무어의 법칙만을 믿고 기다리기에는 인생이 너무 짧다. 짧은 인생동안 해볼수 있는 방법중에 가장 먼저 생각해 볼수 있는 방법이 분산처리이다. 분산처리 방법에는 구글에서 GFS를 기반으로 MapReduce라는것도 있고 HDFS 기반의 Hadoop도 있다. 하지만 그런 툴들의 사용법 보다는 그 시스템 자체가 더 흥미롭다. 리눅스에는 SO(Shared Object)라는 파일이 존재한다. 윈도위의 DLL정도 되겠다. so ..

Public/tip & tech 2009.05.12

warning assignment makes pointer from integer without a cast

apr로 프로그램을 테스트 하던중 심심치 않게 보이는 경고 메세지다. "변수형이 말없이 바뀌었다" 대충 이런 메세지인데 이런 메세지가 발생한 원인을 살펴보니 다음과 같다. 함수 원형이 정의되지 않는 경우 컴파일러는 함수의 리턴값을 int로 가정한다. 그런데 실제 사용한 부분에서는 int가 아닌 타입으로 사용했을 경우 발생한다. 예를 들면 apr_strtok()라는 함수를 사용했는데 헤더파일에 apr_strings.h를 추가하지 않으면 이런 경고 메제시가 발생한다.

Public/tip & tech 2009.05.12

[코드정리]debuging 함수

일반적인 경우 디버깅 함수를 추가할 경우 조건부 컴파일을 이용해서 처리한다. 간단히 예를 보면 #ifdef DEBUG fprintf(stderr,'[%d:%d]\t%s\n",__FUNCTION__,__LINE__,msg ); #endif 그런데 이런식으로 하나의 값을 보기 위해 #ifdef부터 해서 3개줄로 표시를 해야한다. 본인 경험으로는 이런 코드가 많이 질수록 코드가 간결해 보이지 않았다. 보다 코드를 간결하게 처리하기 위해서 다음과 같은 방법을 소개한다. 우선 c파일 상당에 #ifdef DEBUG #define debug(x) x #else #define debug(x) #endif 위와 같이 선언을 하고 디버깅을 위해 변수값을 추가하는 부분에서는 debug( fprintf(stderr,'[%d:..

Public/tip & tech 2009.05.12