C++ m4 매크로 사용과 관련하여 질문이 있습니다. 나는 다른 사람의 코드를 컴파일하려고하고 헤더 파일 중 하나처럼 보이는 라인이 오전 :Flex와 Bison을 사용하여 C++ 헤더 파일을 생성 할 때 m4를 사용하는 방법?
error: expected constructor, destructor, or type conversion before ‘(’ token
:이 코드를 컴파일 할 때 물론이 오류를 반환
b4_copyright(C++ Skeleton parser for LALR(1) parsing with Bison, 2002, 2003)
들소의 설치에서 c.m4 파일 b4_copyright
의 정의는 다음과 같습니다
m4_define([b4_copyright],
[/* A Bison parser, made by GNU Bison b4_version. */
/* $1
m4_text_wrap([Copyright (C) $2 Free Software Foundation, Inc.], [ ])
...
This special exception was added by the Free Software Foundation in
version 2.2 of Bison. */])
나는 오류가 헤더 파일은 플렉스 및 BI에 의해 생성 될 때 생기는 일이라고 생각 아들. 어떤 이유로 Bison이 파싱 된 코드를 처리 할 때 m4 매크로 (이 경우 b4_copyright)의 출력을 억제하지 않습니다. 헤더 파일을 생성 할 때 실행 된 매크로의 표준 출력으로부터 라인을 남겨 둡니다. 왜 그랬을까요?
b4_copyright의 정의가있는 c.m4 파일에 따르면 출력이 표시되지 않아야합니다. c.m4 파일은 m4sugar.m4의 정의도 사용합니다. 그러나이 정의는 m4_divert 함수 (m4sugar.m4에 정의되어 있음)를 사용하여 출력을 억제하지 않기 때문에 c.m4 파일의 어느 부분에도 적용되지 않습니다.
문제점을 발견했습니다. 코드를 생성하는 데 사용 된 lex 스켈레톤 파일에서, 저의 앞에있는 사람은 c4 파일에 m4_include를 추가하는 것을 잊었습니다. 이 문제를 해결할 때마다 내 문제가 수정되었습니다. –