C의 전처리 - 숙제


-1

할당은 :

당신은 C 프리 프로세서를 구현해야합니다. 전처리 기는 명령 행 도구로 구현되며 입력은 C 소스 파일 (.c 확장자)이고 출력은 전처리 된 파일 (.i 확장자)입니다. 이 도구에는 몇 가지 옵션이 있습니다. 성공적인 처리에

$ cppr <options> file.c

는 파일 .I이 생산된다.

< >는 옵션 일 수있다 :

처리기 옵션 -
-Aassertion -C -dD -dM -dN -Dmacro [= defn이] -E -H
-idirafter DIR -include 파일 -imacros 파일
-iprefixfile -iwithprefix 디렉토리 -M -MD -MM -MMD
-nostdinc -P -Umacro -undef
디렉토리
-Bprefix -Idir 옵션 - -I-

,

위의 두 가지 중 하나를 구현하십시오. 이는 요구 사항 단계에서 결정되어야합니다.

다음은 GCC 컴파일러에서 정의한 옵션입니다. 옵션을 이해하려면 GCC의 맨 페이지를 참조하십시오.

당신은 최소한 다음과 같은 기능을 구현해야합니다

  1. 댓글 상수 (안 매크로)
  0

코드를 원하십니까? 또는 과제를 설명해 주시겠습니까? 22 feb. 092009-02-22 04:59:51

  0

이것은 숙제 웹 사이트가 아닙니다. 가서 교수 한테 물어봐. 이 과제가 주어진다면, 과제를 충분히 이해하고 수행 할 수있을만큼 충분히 멀리 있습니다. 22 feb. 092009-02-22 05:20:36

+2

적어도 그는 정직하고 충분히 읽을 수있는 링크를달라고 부탁합니다. "codem을 내놔" 22 feb. 092009-02-22 05:24:17

  0

"givemethecodes"는 @Evan Teran에게 유용한 태그가 아닙니다! 23 feb. 092009-02-23 09:59:07

+1

plzsendtehcodez 여야합니다. :-) 24 feb. 092009-02-24 13:44:46

2

에 대한

  • #ifdef#endif
  • #define 떨어져 스트리핑을 C 교과서에는 st andard C 전 처리기가 있지만, man cpp을 시도 할 수도 있습니다.

    그런 다음이 작업의 제한된 하위 집합 (예 : #ifdef/#endif 쌍의 프로세스, 간단한 #define 초)을 수행하는 프로그램을 작성하십시오.

    프로그램은 명령 줄을 구문 분석하고 위에 나열된 옵션 중 2 개 이상을 받아 들여 gcc 맨 페이지에 설명 된 방식으로 처리해야합니다.


  • 2

    여기에 gcc documentation on preprocessor options이 도움이 될 수 있습니다. 상당히 길지만 대부분 귀찮은 옵션을 다루지 않으므로 관련 섹션을 살펴보고 선택할 수 있습니다.


    3

    정확하게 이해하지 못하는 것을 알지 못하는 대답은 쉽지 않지만, 매우 제한적인 C 경험을 사용하여 어쨌든 시도해 보겠습니다.

    전 처리기 란 무엇입니까? 전처리 기는 컴파일하기 전에 코드 파일에서 일종의 처리를 수행하는 프로그램입니다.

    area = r * r * PI; 
    ... 
    circumference = 2 * r * PI; 
    

    무엇 전처리 여기 일은 대체 할 수 있습니다 :

    #define PI 3.14159 
    

    그런 다음 당신은 당신의 코드에서 의미있는 이름으로이 값을 사용할 수 있습니다 : 당신은, 예를 들어, 처리기 지시문와 기호 상수를 정의 할 수 있습니다 지정한 숫자의 PI가 모두 나타납니다.

    area = r * r * 3.14159; 
    ... 
    circumference = 2 * r * 3.14159; 
    

    또한 상수가 이미 다른 곳에서 정의되어 있는지 여부에 따라 코드를 포함 할 수도 있습니다 (이 일반적으로 여러 개의 파일을 프로젝트에 사용되는) 우리의 코드 : 상수 WINDOWS가 이전에 정의 된 경우 #ifdef#endif 사이

    #define WINDOWS 
    
    ... 
    
    #ifdef WINDOWS 
        /* do Windows-specific stuff here */
    #endif 
    

    의 선에만 포함됩니다.

    지금까지 프로그램에서 수행해야 할 작업에 대해 알고 싶습니다. 은 "최소 기능"

    여기 구현에

    팁 나는 당신에게 최소 교수님이 요구하는 기능을 작성하는 방법에 대한 몇 가지 아이디어를 제공하겠습니다. 이것들은 내 머리 꼭대기에서 떨어져 있기 때문에 먼저 그것에 대해 생각해보십시오. 의견

    입력을 읽는 동안의 오프

    스트리핑을 "/*"를 찾습니다. 이 문제가 발생하면 출력에 쓰는 것을 멈추고 "*/"을 찾으면 다시 쓰기를 시작할 수 있습니다. 부울 플래그를 사용하여 주석 (AFAIK, C에 bool 유형이 없으므로 0 또는 1 또는 더 이상적으로 INSIDE_COMMENTOUTSIDE_COMMENT과 같은 두 개의 기호 상수를 사용할 수 있음)를 나타냅니다. 상수 (안 매크로)

    당신은 #로 시작하는 줄을 발생하면, 분명히 당신이 그것을 쓰는 안된다위한

    #DEFINE. #define 지시어를 찾으면 심볼릭 이름과 값을 어딘가에 (두 문자열 모두) 저장 한 다음 입력에서 이름을 찾아 대신 찾을 때마다 값을 쓰십시오. 상수 이름의 최대 길이를 설정할 수 있습니다. 이것은 C에서 6 자라고 생각하며, 입력에서 항상 6자를 확인합니다. 의 6 문자가 알려진 상수 이름 인으로 시작하는 경우 값을 쓰십시오.

    #ifdef와 및

    #endif //이는 당신이 많은 의견과 마찬가지로, #ifdef 내부에있는 여부를 나타내는 부울 플래그를 만듭니다. #ifdef을 찾을 때 이미 상수 이름을 저장하고 있는지 확인하고 그에 따라 출력에 쓰십시오.

    이 정보가 도움이되기를 바랍니다.

    편집 : gs!

      0

    두 가지 : 중첩 된 #ifdefs가있을 수 있으며 문자열 안에있는/*에주의해야합니다. 일치하지 않아야합니다. 23 feb. 092009-02-23 09:49:37

      0

    C99에는 bool이 있습니다. 예를 들어, 백 슬래시 개행을 삭제하면 주석의 전체 구문이 극심합니다. 물론 코멘트에이를 표시 할 수는 없으며 그런 코멘트는 일반적으로 쓰지 않습니다. 23 feb. 092009-02-23 15:21:41