매크로 질문입니다.

puaxx의 이미지

char *function1(char *,char *){
...
}

char *function2(char *,char *,int){
...
}

int function3(char *,char **,int){
...
}

위와 같은 코드가 있다고 치고 에러처리 루틴을 짠다고 치면..

#define ERR(msg,function)\
  printf("%s : Error %s",function,msg);

#define THIS_FUNC "function1"
char *function1(char *,char *){
...ERR("error",THIS_FUNC);
}

#define THIS_FUNC "function2"
char *function2(char *,char *,int){
...ERR("error",THIS_FUNC);
}

#define THIS_FUNC "function3"
int function3(char *,char **,int){
...ERR("error",THIS_FUNC);
}

위와 같은 방법으로 처리할까 했는데...더 욱 간단하게는 안될까요?

함수 선언할때마다 #define THIS_FUNC 이거 간락하게 어찌 안될까요?

doldori의 이미지

#define ERR(msg) printf("%s : Error %s",__FUNCTION__,msg); 
puaxx의 이미지

감사합니다..상수매크로가 있었군요..ㅋ ^^

xster의 이미지

__FUNCTION__
__FILE__
__LINE__

등등의 상수는 전처리기에서 알아서 바꿔줍니다.
각각
현재 함수
현재 파일
현재 라인
등으로 바꿔줍니다.
더 있을 듯 한데 뭐 찾아보시면 나오겠죠.

doldori의 이미지

윽... 죄송.
__FUNCTION__이 아니라 __func__입니다.

__FUNCTION__ : MSVC용. 표준 아님.
__func__ : C99에서만. C90에는 없음. MSVC에서 안됨.

gcc는 둘 다 됩니다.

익명 사용자의 이미지

ㅎㅎ