아이디어

"C 헤더 함수 자동 인덱싱기 — 진짜 구조를 위한 첫걸음"

cs newbie 2025. 5. 1. 07:09

“이게 뭔 AI야. 문장 길어지면 대화도 못 따라가. 링크도 책갈피도 없고... 이혼이야, 이혼.”

😤 왜 만들었냐면

  • C 프로젝트가 커질수록 헤더 파일 정리는 필수
  • IDE에 의존하면 구조를 몸이 기억 못 함
  • AI도, 교수도 안 알려줌
  • 그래서 직접 만들었다:
    👉 헤더 파일(.h)을 읽고
    👉 함수 목록을 Markdown으로 뽑아주는 C 프로그램

📁 디렉터리 구조 예시

/MyProject
├── include/
│   ├── system.h
│   ├── sensor.h
│   └── motor.h
├── src/
│   ├── main.c
├── generate_index.c
└── FUNCTION_INDEX.md

⚙️ 자동화 스크립트 (generate_index.c)

#include <stdio.h>
#include <dirent.h>
#include <string.h>
#include <stdlib.h>

#define MAX_PATH 1024

void generate_markdown_index(const char *root_dir, const char *output_file) {
    FILE *md_file = fopen(output_file, "w");
    if (!md_file) {
        perror("Error opening file for writing");
        return;
    }

    fprintf(md_file, "# 함수 목록\n\n");

    DIR *dir = opendir(root_dir);
    if (!dir) {
        perror("Error opening directory");
        fclose(md_file);
        return;
    }

    struct dirent *entry;
    char full_path[MAX_PATH];

    while ((entry = readdir(dir)) != NULL) {
        if (entry->d_type == DT_REG && strstr(entry->d_name, ".h")) {
            snprintf(full_path, sizeof(full_path), "%s/%s", root_dir, entry->d_name);

            FILE *header_file = fopen(full_path, "r");
            if (header_file) {
                char line[512];
                fprintf(md_file, "## %s\n", entry->d_name);

                while (fgets(line, sizeof(line), header_file)) {
                    if (strstr(line, "int") || strstr(line, "void")) {
                        char *function_name = strtok(line, "(");
                        if (function_name) {
                            function_name = strtok(function_name, " ");
                            fprintf(md_file, "- [%s](%s)\n", function_name, full_path);
                        }
                    }
                }
                fclose(header_file);
            }
        }
    }

    closedir(dir);
    fclose(md_file);
    printf("Markdown 파일 '%s' 생성 완료\n", output_file);
}

int main() {
    const char *root_dir = "include";
    const char *output_file = "FUNCTION_INDEX.md";

    generate_markdown_index(root_dir, output_file);
    return 0;
}

🧪 결과물 예시 (FUNCTION_INDEX.md)

# 함수 목록

## system.h
- [system_start](include/system.h)

## sensor.h
- [init_sensor](include/sensor.h)

## motor.h
- [init_motor](include/motor.h)

🧠 교훈

  • 헤더 정리도 자동화할 수 있다
  • 구조를 알면 IDE가 없어도 관리 가능
  • AI보다, 교수보다, 나 자신이 더 믿을 만하다

💡 마무리

MUD 게임도 만들고 싶고, 구조도 깔끔하게 짜고 싶다면
이런 도구 하나쯤은 직접 만드는 게 낫습니다.
그리고 그런 과정에서 진짜 실력이 붙습니다.