[C/C++] 전역변수 초기화를 여러 곳에서 나누어서 할 수 있을지 질문드립니다.
글쓴이: lvheart / 작성시간: 월, 2018/07/23 - 5:00오후
제가 프로그램에 log message를 함수 여러곳에서 사용하고, 최초 프로그램을 실행할 때 log message를 실행한 모든 곳의 정보를 알고 싶습니다. 실제는 log message가 아닌 함수 호출시 주변 정보를 알고 싶은 거지만, 편의상 log라고 하겠습니다.
debug.h
#define DEBUG(x) (1) {__FILE__, __LINE__, __func__ }로 전역변수 loginfo를 초기화 \ printf(__VA_ARGS__) extern struct LogInfo { char * filename; int linenum; char * functionname; };
main.c
#include "debug.h" struct LogInfo loginfo[] = (2); <--- int main(void) { DEBUG("entered main"); ... }
usage.c
#include "debug.h" int add(int a, int b) { DEBUG("entered add"); ... DEBUG("exited add"); } int sub(int a, int b) { DEBUG("entered sub"); ... DEBUG("exited sub"); }
이럴때 (1)과 (2)를 pragma던 attribute던 어떤 기술을 사용해서, DEBUG함수가 호출될 때마다,
마치 아래처럼 전역변수가 초기화 되듯 초기화 될 방법이 있을까요?
struct LogInfo loginfo[] = { {"main.c", 4, "main"}, {"usage.c", 4, "add"}, {...}, ...};
참고로 __attribute__((section("name"))) 을 이용해서, 특정 section에 배치하고, section 위, 아래에 symbol을
넣어서 읽어오는 방법을 고려해보았으나, 위의 DEBUG함수 부분이 shared library일 경우 동작이 안될 듯해서 배제하려고 합니다.
다른 방법은 없을지 초고수님들의 답변을 기대하고 부탁드립니다. ^^
Forums:
참고해보세요.
- #define ## 으로 변수를 사용하는 방법
https://kldp.org/node/153583
http://codepad.org/aQW8Gvi6
https://blog.naver.com/dolicom/10096312448
- 2 개 만들어서 사용해도 됩니다. ㅇ_ㅇ;;
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
댓글 달기