해결된 질문
작성
·
41
0
스위치 인터럽트로 xshell에 push 문구를 띄울 때 헤더 파일을 쓰지 않고 전역 변수 cahr g_f_sw_up = 0; 선언으로 할 수 있을 것 같은데 헤더 파일을 이용해서 변수를 선언 하는 이유가 있나요?
답변 2
0
전역 변수를 선언하면, 같은 이름으로 다른 곳에서 그 변수를 또 정의할 수는 없습니다. 전역 변수는 말 그대로 프로젝트 전체에서 공유해야 하는 특별한 경우에만 사용하는 걸 권장합니다.
이렇게 정의된 전역 변수는 정말로 어디서든 접근이 가능해야 하기 때문에, 보통은 한 곳에서 정의하고, 다른 곳에서는 그 변수를 extern
키워드로 참조하는 방식으로 사용합니다. 이때 extern
선언은 헤더 파일에 작성하고, 이를 필요한 소스 파일에서 #include
하여 사용하죠.
즉, 여러 파일에서 동일한 전역 변수를 공유하기 위해 이런 구조를 잡는 겁니다. 만약 한 파일에서만 사용할 변수라면 굳이 전역 변수로 만들 필요 없이, 지역 변수나 static
키워드를 사용해서 해당 파일 내부에서만 쓰이도록 하는 것이 좋습니다.
만약 헤더 파일에 extern
없이 char g_f_sw_up;
처럼 변수를 직접 정의하게 되면 어떤 일이 벌어질까요?
헤더는 #include
를 통해 여러 소스 파일에 포함되는데, 이건 사실상 헤더 내용이 복사-붙여넣기 되는 것과 같습니다. 따라서 같은 전역 변수가 여러 번 정의되는 셈이 되고, 링커 에러(Linker Error)가 발생하게 됩니다.
물론 해당 헤더를 단 하나의 파일에서만 #include
한다면 에러는 나지 않겠지만, 두 곳 이상에서 #include
하게 되면 충돌이 발생하게 되죠.
0
안녕하세요, 인프런 AI 인턴입니다. 윤정현님!
헤더 파일은 임베디드 시스템 및 일반적인 C/C++ 프로젝트에서 매우 중요한 역할을 합니다. 헤더 파일을 사용하는 주요 이유를 요약해 드리겠습니다.
코드 구조화 & 유지보수성: 헤더 파일을 사용하면 코드의 구조가 더 명료해지고 짜임새 있게 유지할 수 있습니다. 전역 변수 및 함수 프로토타입을 헤더 파일에 선언하여, 여러 소스 파일에서 공통으로 사용할 수 있도록 합니다. 이는 큰 프로젝트에서 시스템의 복잡성을 줄이고 유지보수성을 높여줍니다.
코드의 재사용성 증가: 헤더 파일에 정의된 변수나 함수는 여러 다른 소스 파일에서 쉽게 포함하여 사용할 수 있습니다. 이를 통해 동일한 코드를 여러 파일에 중복해서 작성할 필요가 없어집니다.
컴파일 시간 단축: 일정 부분 컴파일러가 소스를 분석하는 데 소요되는 시간을 줄여줍니다. 각 소스 파일은 필요한 헤더 파일만 포함하도록 하여 컴파일러가 처리해야 할 양을 줄이는 것입니다.
더 자세히 알아보려면 아래의 유사한 질문과 답변 링크들을 참고하실 수 있습니다:
이 자료들을 통해 헤더 파일을 사용하는 이유에 대해 좀 더 깊이 있는 이해가 가능하실 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.