전체 글7 int main(int argc, char *argv[])와 execl(...) int main(int argc, char *argv[])는 C 프로그램의 시작점이며, exec() 같은 시스템콜을 통해 전달된 인자들이 여기에 들어옵니다. 매우 중요한 부분이니, 아래에서 구조, 의미, 실행 흐름, 그리고 실전 예시까지 상세하게 설명드릴게요.✅ 기본 구조int main(int argc, char *argv[])항목 설명argcArgument Count — 인자의 개수 (argv[] 배열의 길이)argv[]Argument Vector — 인자 문자열 포인터 배열 (char *들의 배열)✅ 기본 개념예: 아래와 같이 프로그램을 실행했을 때./hello foo barargc == 3argv[0] == "./hello"argv[1] == "foo"argv[2] == "bar"argv[3] ==.. 2025. 6. 23. 오브젝트 파일(.o) 분석 .o 파일(오브젝트 파일)은 컴파일된 기계어 코드이기 때문에,텍스트 에디터(예: vim)에서 열면 의미 없는 기호, 제어문자, null 바이트 등이 나옵니다.왜냐하면 .o 파일은 바이너리 포맷이라 사람이 직접 읽기 위해 만들어진 것이 아니기 때문입니다. 🧠 그럼 .o 파일엔 어떤 정보가 들어 있을까?오브젝트 파일은 아직 링크되지 않은 기계어 코드 + 메타데이터입니다.gcc -c something.c 하면 생기는 .o 파일은 다음을 포함합니다: 구성 요소설명기계어 코드컴파일된 함수, 전역 변수 등의 바이트코드심볼 테이블함수/변수의 이름과 주소, 크기 등 정보섹션 정보.text (코드), .data (초기화된 전역변수), .bss (미초기화 전역변수), .rodata (상수 문자열) 등디버깅 정보-g 옵.. 2025. 6. 20. .PHONY란? .PHONY는 Makefile에서 **“가짜 타겟”**임을 명시해주는 특수 지시어입니다.즉, 실제로 존재할 수도 있는 파일 이름과 헷갈리지 말라고 Make에게 알려주는 역할을 합니다. ✅ .PHONY의 정확한 의미.PHONY: pointer_examplepointer_example은 파일 이름이 아니라, 단순히 작업 이름이야. 실제 해당 이름의 파일이 있어도 항상 이 타겟의 명령을 실행해줘.❗ 왜 필요한가?make는 기본적으로:타겟 이름과 동일한 이름의 파일이 존재하면,그 타겟은 “최신 상태”라고 간주하고 명령을 실행하지 않습니다.예시 없이 .PHONY 없을 때 발생하는 문제:clean: rm -rf build bin처음엔 잘 작동합니다: make clean그런데 누군가 clean이라는 파일이나 디렉토리.. 2025. 6. 20. C 프로젝트의 폴더 구조 C 프로젝트에서 오브젝트 파일(.o)과 실행 파일(a.out, my_program, 등)을 소스 파일과 분리된 디렉토리에 관리하는 건 실무에서 거의 기본적인 관행이에요. 📁 왜 분리하나요?이유설명정리소스(.c, .h)와 중간 산출물(.o)을 분리해서 디렉토리가 깔끔해짐빌드 속도 최적화make가 오브젝트 파일만 다시 빌드하면 되기 때문에 구조적으로 더 효율적출력 경로 분리바이너리와 중간 파일을 build/나 bin/ 폴더에 두면 나중에 .gitignore 관리도 쉬움멀티 플랫폼/빌드 타입build/debug/, build/release/, build/linux/, build/macos/ 등으로 나누기 쉬움 🧱 일반적인 구조 예시project/├── src/ # 소스 코드 (.c.. 2025. 6. 20. 문자열 패턴 치환 GNU Make에는 문자열을 다루기 위한 다양한 내장 함수들이 있으며,이들을 적절히 활용하면 Makefile을 훨씬 유연하고 자동화된 형태로 작성할 수 있습니다.wildcard, subst, filter, addprefix, addsuffix — 를 하나씩 예제와 함께 설명드릴게요. 🐾 1. wildcard📌 목적:파일 목록을 가져오기 위해 사용됩니다. 디렉토리 안의 .c, .h 파일들을 자동으로 탐색할 때 유용합니다.🧪 예제:SOURCES := $(wildcard src/*.c)HEADERS := $(wildcard include/*.h)src/*.c 경로에 있는 모든 .c 파일들을 SOURCES 변수에 저장존재하지 않는 경로는 빈 문자열로 처리🔁 2. subst📌 목적:문자열 치환 (repl.. 2025. 6. 20. makefile GNU Make의 패턴 규칙 # Simple Makefile with use of gcc.PHONY: all clean run test install uninstall debugCC=gcc# -g: 디버그 정보 추가, -Wall: 모든 경고 메시지 표시CFLAGS=-g -WallSRC_DIR=srcOBJ_DIR=buildBIN_DIR=bin# $(wildcard ...) : 해당 디렉토리의 모든 파일 가져오기# $(patsubst A, B, C) 문자열 패턴 치환 (경로 대응)EXEC=$(BIN_DIR)/c_studySOURCES=$(wildcard $(SRC_DIR)/*.c)OBJECTS=$(patsubst $(SRC_DIR)/%.c, $(OBJ_DIR)/%.o, $(SOURCES))# 기본 빌드all: $(EXEC)clean: .. 2025. 6. 20. 이전 1 2 다음