[C/C++] 전역변수 초기화를 여러 곳에서 나누어서 할 수 있을지 질문드립니다.

lvheart의 이미지

제가 프로그램에 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일 경우 동작이 안될 듯해서 배제하려고 합니다.

다른 방법은 없을지 초고수님들의 답변을 기대하고 부탁드립니다. ^^

shint의 이미지

- #define ## 으로 변수를 사용하는 방법
https://kldp.org/node/153583
http://codepad.org/aQW8Gvi6
https://blog.naver.com/dolicom/10096312448

- 2 개 만들어서 사용해도 됩니다. ㅇ_ㅇ;;

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com