그래서 코드를 정리하고 전역 상수 (char const * strings 등)를 별도의 cpp 파일에 정의하고 extern을 선언하는 헤더가있는 제안을 발견했습니다. 그런 다음 필요할 때마다 헤더를 포함하고 단일 위치에서 변수에 액세스 할 수 있습니다. 예를 들어extern 선언을 사용하여 헤더 파일을 만드는 점은 무엇입니까?
strings.hpp
extern char const* strA;
extern char const* strB;
strings.cpp이 내가 생각했지만, 조금 후에는이가는 것을 나에게 발생, 감각을 만들어
#include "strings.hpp"
char const* strA = "strA";
char const* strB = "strB";
프로젝트의 큰 덩어리를 불필요하게 다시 컴파일 할 수 있습니다. 예를 들어, 모든 문자열을 함께 보관하면 새 문자열을 추가 할 때마다 헤더를 수정해야합니다. 즉, 해당 헤더를 포함하는 모든 cpp 파일이 다시 컴파일됩니다. 프로젝트가 복잡 해짐에 따라 시간이 많이 걸릴지는 확실치 않지만이 점이 합쳐질 수 있습니다.
이 문제에 대한 해결책이 아이디어를 유지하는 대신 헤더를 포함, 선언하고 하나 개의 cpp 파일에서 상수를 정의하는 것이 나에게 보인다
strings.cpp
extern char const* strA;
extern char const* strB;
char const* strA = "strA";
char const* strB = "strB";
그런 다음 문자열을 필요로하는 파일에, 나는 필요한 변수
에게
extern char const* strA;
A.cpp 선언
B.cpp
extern char const* strB;
는 기본적으로 수동으로 나를 위해했을 포함하는 일.
C.cpp에서 사용 된 char const * strC를 나중에 추가해야하는 경우 strings.cpp에 extern 선언과 정의를 추가하고 C.cpp에서 다시 선언하고 A.cpp B.cpp는 다시 컴파일 할 필요가 없습니다.
이 접근법의 단점은 코드 중복입니다. 변수를 한 번 선언하고 선언을 포함하는 대신 모든 변수를 어디에서나 선언하고 사용해야합니다. 그 문제는 변수의 이름을 바꾸기로 결정한 경우 여러 위치에서 이름을 바꾸어야한다는 것입니다. 그런데 다시 변수 이름을 바꾸면 어쨌든 선언이 포함되어 있어도 어쨌든 그것을 사용하는 모든 파일을 수정해야합니다. 그리고 어쨌든 전역 이름 바꾸기 만 할 수 있습니다.
여러 소스 파일을 다시 컴파일 할 때 비용에 영향을주지 않는 변경 사항은 변경 될 수도 있고 수정하지 않을 수도있는 변수의 이름 바꾸기 비용보다 훨씬 커질 수 있습니다. 그러나 아직 언급 된 선언 헤더의 단점을 본 적이 없습니다.
누락 된 항목이 있습니까?
나는 모든 문자열을 함께 유지합니다. 그것이 내가 결국 제안한 것입니다. 방금 헤더를 없애고 파일에 extern 변수를 선언하고 문자열 정의를 하나의 파일로 유지하도록 요청했습니다. 문자열 추가 및 수정이 모두 저렴하다는 것을 의미합니다. 그래서 strings.hpp와 strings.cpp 대신에 strings.cpp 만 있습니다. – Kian