2009-11-20 2 views
1

이와 비슷한 작업을 수행 할 수 있다면 응용 프로그램에서 수백 줄의 코드를 잘라내어 유지 관리 가능성을 크게 높일 수 있습니다. 누구든지 아이디어가 있습니까?C 프로그래밍 : 프리 프로세서, 매크로 파일 포함

#include <stdio.h> 

int main() 
{ 
    #define include_all_files(root) \ 
      #include #root "1.h" \ 
      #include #root "2.h" \ 
      #include #root "3.h" \ 
      #include #root "4.h" 

    include_all_files(first_library) 
    include_all_files(second_library) 
    include_all_files(third_library) 

    return 0; 
} 

편집 : 나는이 답변을 주셔서 감사합니다

, 내 예, 그래서 여기에 노력에서 잘못된 방향으로가는 원인이 될 것으로 보인다 실제로 해결하기 위해 노력하고있는 문제입니다 : 내가 구현하고

을 유한 상태 기계.

ADD_STATE(initial_screen) 
    ADD_STATE(login) 
: 나는 원래의 질문에 대답 할 수 있다면

STATE(initial_screen) 
    #include "initial_screen.state" 
    END_STATE 

    STATE(login) 
    #include "login.state" 
    END_STATE 

그러나, 나는 같은 간단한이를 리팩토링 수 : 명명 규칙을 통해, 나는 같은 상태를 추가로 단순하게 그것을 입수했습니다

파일 이름과 상태 이름, 모든 기본 배선 및 기타 모든 항목이 모두 유사한 규칙을 따르기 때문입니다. 그러나 매크로에서받은 토큰에 따라 include 파일을 구현하는 방법을 알 수 없습니다.

+1

아마도 의견을 추가하는 대신 첫 번째 소식을 수정하는 것이 좋습니다. –

+0

고맙습니다, Anders, 내가 그 일을 할 수 있다는 것을 깨닫지 못했습니다. 편집을 추가했습니다. –

답변

3

불행히도 이것은 C 전처리 기의 기능을 벗어납니다.

대신 m4과 같은 것을 사용하셨습니까?

+0

LnxPrgr3, 내 학교 컴퓨터와 호환되는지 확인하려면 문서를 읽어야 할 것입니다. 그러나 이것은 잠시 동안 바라던 것입니다. ^^ –

+0

Lol, 이미 있습니다. 내 학교 컴퓨터에 설치^_^정말 고마워요 : D 조 –

7

그 자체의 헤더 파일을 작성하지 않는 이유는 무엇입니까? #include 라이브러리의 다른 모든 헤더 파일이 있습니까? 그런 다음 각 라이브러리에 대해 해당 라이브러리의 하나의 메타 헤더 만 포함하면됩니다.

#include "includes.h" 
1

,이 가능성이 것 작동하지. 나는 전처리가 반복적 일 수 있다고 생각하지 않는다. (또는 iterative).

대신 이것이 수행되는 일반적인 방법은 원하는 모든 #include를 포함하는 작은 포함 파일을 만드는 것입니다. 일러스트레이션에 대한 코리 페토 스키 (Cory Petosky)의 답변을 참조하십시오.

주의의 단어 :
이 코드 라인의 수백을 잘라 수 있지만, 당신은 이 코드의 "쉽게"라인이 있음을 고려해야한다. 프로그램의 진정한 논리와 관련된 코드 라인과는 달리, 일반적으로 이들을 둘러칩니다.

또한 특정 파일에 필요한 개별 포함을 명시 적으로 나열하면 자체 설명서가 약간 제공되므로 필요할 때 코드를 쉽게 리팩터링 할 수 있습니다.

편집 : 이것은 단지 ;-)
누군가에 너무 Good idea to put all project headers into one file? 질문이 요청 및 응답은 일반적으로 그룹화 헤더에서 가지게되는 약간의 이득은 일반적으로가 있음을 필자의 동의 보인다.

1

사용법 #include 전처리 지시어 자체가 매크로 평가와 같은 단계에서 처리되는 다른 모든 파일에서 파일 INCLUDES.H

#include "1.h" 
#include "2.h" 
#include "3.h" 

에서

2

는 단지 그들이 STATE() 시작 너무 initial_screen.statelogin.state를 리팩토링과 END_STATE으로 끝낼 수 있었다, 당신 명확하게 문제를 해결합니다. 그럼 당신은 할 수 있습니다 : 당신이 계신에 해당

#include "initial_screen.state" 
#include "login.state" 

를 ... - 그것은 단지 #include 대신의 ADD_STATE입니다.

관련 문제