문제

나는 Ubuntu Linux와 함께 C에서 프로그램을 작성했으며 이제 Unix 머신 (또는 Unix 상자라고 생각하는 것)으로 포트해야합니다. GCC로 Ubuntu에서 잘 컴파일하지만 Unix 박스에서 GCC로 컴파일하려고하면 다음 오류가 발생합니다.

a.c: In function `goUpDir':
a.c:44: parse error before `char'
a.c:45: `newDir' undeclared (first use in this function)
a.c:45: (Each undeclared identifier is reported only once
a.c:45: for each function it appears in.)
a.c: In function `goIntoDir':
a.c:54: parse error before `char'
a.c:57: `newDir' undeclared (first use in this function)
a.c:57: `oldDir' undeclared (first use in this function)

주요 문제는 이전에 구문 분석 오류 인 것 같습니다. char (다른 것들은 관련이 있습니다)

44  char newDir[50] = ""; 
54  char* oldDir = (char*)get_current_dir_name();

이것들은 단순한 C 스타일 문자열 선언입니다. UNIX에서 작동하기 위해 포함 해야하는 헤더 파일이 있습니까?

추신 : UNIX 버전과 어떤 버전의 GCC 버전을 사용하고 있는지 확인하는 명령은 무엇입니까? 이것을 아는 것은 제 질문에서 더 구체적 일 수 있습니다.

감사

도움이 되었습니까?

해결책

순수한 C를 컴파일하는 경우 기능의 구걸에 따라 변수가 선언되어야합니다. 나는 대부분의 사람들이 C ++ 컴파일러를 사용하여 C 프로그램을 컴파일하기 때문에 이것을 언급합니다.이 컴파일러는 Pure C 컴파일러에게 일반적으로 사용할 수없는 리소스를 제공하며 가장 일반적인 예는 // 댓글 줄입니다.

다른 팁

코드가 휴대용인지 확인하려면 항상 -pedantic 또는 -pedantic -errors를 사용하십시오.

이것은 코드가 표준 준수에서 벗어나는 경고/오류를 제공합니다.

우리가 주제에있는 동안. 아마도 모든 경고를 켜야 할 것입니다. 컴파일러가 당신에게 경고하는 이유가 있습니다. 새로운 하드웨어/OS/컴파일러가 현재와 동일하게 작동하지 않을 수 있으므로 한 플랫폼에서 다른 플랫폼으로 코드를 이동할 때 이러한 경고는 잠재적 인 버그의 원인입니다.

또한 올바른 GCC FrontEnd 실행 가능한 실행 파일을 사용하십시오. G ++는 명시 적으로 말하지 않는 한 *.C 파일을 C ++ 파일과 같은 처리합니다. 따라서 실제 C를 컴파일하는 경우 G ++가 아닌 GCC를 사용하십시오.

gcc -pedantic -wall -werror *.c
g ++ -pedantic -wall -werror *.cpp

특정 문제를 돕기 위해서는 43 행을 보는 것이 좋을 수 있습니다. 오류는 44 행이라고 말하지만 많은 문제가 문제가 발생하고 첫 번째 Lexeme에 도달 할 때까지 파서에 의해 감지되지 않은 문제로 인해 많은 문제가 발생합니다. 다음 줄에서.

파일을 어떻게 복사 했습니까? 거기에 없어야 할 것을 삽입 할 수 있습니까?

BTW : 코드에서 코드 태그 사용을 수정하십시오. 브라우저에서 "보기 소스"를 사용하지 않고는 현재 읽을 수 없습니다.

당신은 질문을 종료합니다.

uname -a
gcc -v

휴대용 코드를 작성하려고 할 때 다음 컴파일러 플래그는 많은 문제에 대해 알려줍니다. ~ 전에 다음 플랫폼에서 코드를 컴파일하려고 할 때까지 얻을 수 있습니다.

-std=c89 -pedantic -Wall

다른 컴파일러가 아닌 다른 플랫폼에서 GCC를 대상으로 해야하는 경우 시도 할 수 있습니다.

-std=gnu89 -pedantic -Wall

그러나 이것이 오래된 GCC에서 지원되지 않는 새로운 GCC에서 GNU 확장을 허용 할 수 있다고 생각합니다. 잘 모르겠습니다.

비표준이 비표준 프로그램에 대해 경고를 보장한다면 좋을 것입니다. 여전히 그리워하는 것들이 있습니다.

당신은 오류에 대한 더 많은 컨텍스트를 제공해야 할 것입니다 ... 적어도 하나, 아마도 44 번과 54 행 앞에 몇 줄에 몇 줄을 제공해야합니다. 54 행까지 (또는 몇 줄 나중에 - 나중에 - 아마도 60 라인 - 우리는 도움을 줄 수 있습니다. 44 행 이전의 정보는 'char'이외의 다른 것을 기대하게하는 정보가 있습니다. 44 행; 54 행에서 Ditto (아마도 동일한 문제).

정보가 충분하지 않습니다. 위의 코드는 적어도 intersting과 같으며 ANSI C89 또는 ANSI C99에 대해 이야기하는지 알아야합니다. 첫 번째 대답은 그 넓은 의미에서 잘못입니다.

Friedrich에 안부

스티브,

첫 번째 오류 메시지는 "parse error before 'char'". 코드는 무엇입니까? 앞서 숯? 함수 선언입니까? 사용자 정의 유형이나 종류가 포함되어 있습니까?

이 오류의 가장 큰 원인은 곧 ~ 위에 44 행은 헤더 파일로 선언 된 유형 또는 매크로를 사용합니다 ... 해당 헤더 파일은 자신의 우분투 시스템과 컴파일하려는 시스템마다 다를 수 있습니다.

유닉스는 무엇입니까? AIX, Ultrix, Minix, Xenix?

GCC에는 "-Version"플래그가 있습니다.

gcc --version

GCC 버전을 표시하려면 :

gcc --version

주변 코드를 볼 수 있도록 기능을 표시하는 데 도움이 될 수 있습니다. 이는 종종 "Parse Error 이전"유형 오류의 문제입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top