아이디어
"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 게임도 만들고 싶고, 구조도 깔끔하게 짜고 싶다면
이런 도구 하나쯤은 직접 만드는 게 낫습니다.
그리고 그런 과정에서 진짜 실력이 붙습니다.