Compile Error ...

gkepsgds의 이미지

HP-UX, Ansi C, gcc를 사용하고 있습니다.

그런데 제가 짠 프로그램을 컴파일 하는데
에러가 나네요!

소스를 예를 들자면

   int foo(const char *, int );

   void main()
  {
   ....
   여기서 foo 호출
   }

int foo( ch, n)
const char *ch;
int n;
{
..
return 1;
}

 

이런 식으로 짰는데..
(Bundled) cc: "test.c", line 39: warning 5: "const" will become a keyword
.
(Bundled) cc: "test.c", line 39: error 1000: Unexpected symbol: "char".
(Bundled) cc: "test.c", line 39: error 1000: Unexpected symbol: ")".
(Bundled) cc: "test.c", line 39: error 1506: Parameters allowed in functi
on definition only.
(Bundled) cc: "test.c", line 1998: warning 5: "const" will become a keywo
rd.
(Bundled) cc: "gpms_client.c", line 1998: error 1000: Unexpected symbol: "const"

이런 에러가 납니다.

const를 빼고 선언하면 에러는 없습니다.
왜 이런 에러가 나는지 통 모르겠네요.

답변 부탁드립니다.

Necromancer의 이미지

int foo( ch, n)
const char *ch;
int n;
{
..
return 1;
}

 

이게 전형적인 K&R C입니다. ANSI C에서는 아래와 같이 인수와 형을
짝지어서 함수 인수란에 다 넣습니다.

ansi C 쓴다고 하셨으니 당연히 에러 날 수밖에 없져

int foo(const char *ch,int n)
{
.............
}

아 참 그리고 const는 C++이라면 몰라도 C에서는 웬간해서 빼는게 좋을 듯 한데..
컴파일러별로 별의별 특성이 다 있으니...

(일례를 들자면 구형 gcc의 경우 for문 초기화와 증감 산술식, 즉 세미콜론으로
구분되는 각 수식 중 첫번째와 세번째에
복잡한 수식 집어넣으면 컴파일 에러 엄청 냈습니다.)

Written By the Black Knight of Destruction

전웅의 이미지

흑기사 wrote:
int foo(const char *ch,int n)
{
.............
}

아 참 그리고 const는 C++이라면 몰라도 C에서는 웬간해서 빼는게 좋을 듯 한데..
컴파일러별로 별의별 특성이 다 있으니...

(일례를 들자면 gcc 2.x의 경우 for문 초기화와 증감 산술식에
복잡한 수식 집어넣으면 컴파일 에러 엄청 냈습니다.)

ANSI-C 이야기를 하면서 컴파일러의 특성을 고려해 const 를 빼자는 의견은
서로 상충됩니다. const/volatile 은 ANSI-C 에 공식적으로 추가된 것입니다.

--
Jun, Woong (woong at gmail.com)
http://www.woong.org

gkepsgds의 이미지

 
첫번째
  int foo(const char * ch, int n )
{
...
return 1;
}

두번째
int foo(ch, n)
const char *ch;
int n;
{
...
return 1;
}

첫번째 방법으로 정의하든 두번재 방법으로 정의 하든 에러는 같은 에러가 나네요. 왜일까요?

전웅의 이미지

gkepsgds wrote:
 
첫번째
  int foo(const char * ch, int n )
{
...
return 1;
}

두번째
int foo(ch, n)
const char *ch;
int n;
{
...
return 1;
}

첫번째 방법으로 정의하든 두번재 방법으로 정의 하든 에러는 같은 에러가 나네요. 왜일까요?

다른 부분을 "완전히 배제한" 순수한 다음 코드가 제대로 번역되지 않는지요?

int foo(const char *, int);

int main(void)
{ 
    return foo(0, 0);
} 

int foo(const char *ch, int n)
{
    return 0;
}

만약 위의 코드 번역에 문제가 없다면 님께서 생략하신 부분에 문제가 있는
것이며, 위의 코드 번역에도 문제가 있다면 사용하신 컴파일러 옵션과 버전을
함께 알려주시는 것이 답변하는데 도움이 되리라 생각합니다.

--
Jun, Woong (woong at gmail.com)
http://www.woong.org

gkepsgds의 이미지

전웅 wrote:
int foo(const char *, int);

int main(void)
{ 
    return foo(0, 0);
} 

int foo(const char *ch, int n)
{
    return 0;
}

위의 코드만으로 컴파일 하니 에러가 발생하지 않더군요. ㅠ.ㅠ

제가 사용하는 옵션은 -lm -lpthread -lclntst8 를 사용하고 있습니다.

gcc 버전은
>gcc -v
Reading specs from /usr/local/pa20_64/lib/gcc-lib/hppa64-hp-hpux11.00/3.2/specs
Configured with: ../gcc/configure --prefix=/usr/local/pa20_64 --enable-languages
=c,c++ --host=hppa64-hp-hpux11.00 --target=hppa64-hp-hpux11.00 --with-ld=/usr/cc
s/bin/ld --with-gnu-as --enable-libstdcxx-v3 --disable-checking
Thread model: single
gcc version 3.2 20020708 (experimental)

버그소년의 이미지

혹시나 해서 글을 올립니다.

저도 HP에서 컴파일이 잘 되지 않은적이 있어서요..

제가 사용한 컴파일러의 버전은 잘 모르겠고..

아무튼 각 변수선언시 초기값을 주면 컴파일 에러가 난적이 있더군요..

int i = 1; // 이렇게 하면 에러가....

int i;
i = 1;   // 이렇게 하면 정상...

왜 그런지는 저도 잘 모르겠습니다.. ^^;

가끔은 밥을 굶어도 살 수 있다.

전웅의 이미지

gkepsgds wrote:
int foo(const char *, int);

int main(void)
{ 
    return foo(0, 0);
} 

int foo(const char *ch, int n)
{
    return 0;
}

위의 코드만으로 컴파일 하니 에러가 발생하지 않더군요. ㅠ.ㅠ

글 올리시면서 생략하신 부분에 문제가 있는 듯 합니다. 그리 방대하지
않다면 문제가 되는 부분을 가감없이 올리시는 것이 도움이 되지 않을까
생각합니다.

--
Jun, Woong (woong at gmail.com)
http://www.woong.org

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.