study gomi

[c] 한 project내 다른 소스 파일에 있는 함수 사용하기 (visual studio 화면 참고) 본문

basic/c

[c] 한 project내 다른 소스 파일에 있는 함수 사용하기 (visual studio 화면 참고)

공부하곰 2025. 2. 5. 16:43
728x90
반응형

c공부 중...

visual studio도 거의 처음 써 봤다.

같은 프로젝트 내에서 한 소스 파일에서 다른 소스 파일에 정의된 함수를 호출해서 사용하려고 했는데 에러가 발생했다.

android studio만 사용해왔던 나에겐 너무 생소...

암튼 그래서 알아봤는데 헤더 파일이 필요하다구....


문제 상황

일단 내 프로젝트 내 소스 파일 두 개 ↑

func_call.c에서 func_dummy.c의 함수 두 개(func1, func2)를 아래처럼 사용하려고 했는데 빌드 안 됨.

func_call.c
func_dummy.c

 

📌 C 파일 관리

Kotlin과 달리 자동으로 같은 패키지에 있는 클래스나 함수를 import 시키는 기능이 없음.

함수가 어디에 정의되어 있는지 명확하게 컴파일러에 알려줄 필요가 있다.

 

📌헤더 파일(.h)이 필요한 이유?

1. 컴파일러가 함수의 존재를 알아야 하기 때문

  • func_dummy.c 에서 func1();을 호출한다고 할 때,
  • 컴파일러는 func_dummy.c만 보고는 func1()이 어디에 있는지 모름.
  • 그래서 함수가 어떤 파일에 정의되어 있는지 알려주는 역할을 하는 게 헤더 파일(.h)

2. 다른 소스 파일(.c)에서 함수를 사용하려면 extern 선언이 필요함.

  • 함수가 정의된 파일과 호출하는 파일이 다를 때 함수 선언만 따로 헤더 파일(.h)에 적고 #include 하면 됨.
  • 이렇게 하면 컴파일러가 함수의 선언을 보고 "아, 이런 함수가 있구나!"하고 넘어갈 수 있음.
  • 근데 헤더 파일이 없이 하려면 extern 키워드를 직접 써줘야 하는데 좋은 방법은 아님.
  • 이 방법보다는 함수 선언을 헤더 파일에 모아두고 #include "파일명.h"로 가져오는 게 더 편리하고 유지보수하기 좋음.
더보기

📌 헤더 파일 없이 하는 방법 (extern)

헤더 파일 없이도 다른 소스 파일의 함수를 사용할 수는 있지만 컴파일러가 함수의 존재를 모르면 오류가 남.

그래서 헤더 파일 없이 하려면 extern 키워드를 직접 써서 함수 선언을 수동으로 해줘야 함.

하지만 이 방법은 비효율적이고 유지보수가 어려워서 잘 안 씀.

 

// func_dummy.c의 함수가 여기 있다고 알려줌
extern void func1(void);
extern void func2(void);

int main(void) {
	func1();
	func2();
    
    return 0;
}

📌 정리

같은 프로젝트 내에 있는 C 소스 파일을 가져다 쓰려면?

✅ 함수 정의 파일(.c)

✅ 함수 선언 파일(.h) → #include로 사용 

.c 파일끼리는 자동으로 연결되지 않음. 직접 선언이 필요!

 

📌 결론

1. 헤더 파일 추가

#pragma once
#ifndef FUNC_DUMMY_H
#define FUNC_DUMMY_H

// static 함수: 해당 파일 내에서만 쓸 수 있는 함수

void func1(void);
void func2(void);

#endif

 

2. 사용하려는 곳에서 추가한 헤더 파일을 include 해줌.

#include "func_dummy.h"

int main(void) {
	func1();
	func2();

	return 0;
}

 

빌드 성공~

728x90
반응형