Compile Error ...
글쓴이: gkepsgds / 작성시간: 월, 2003/07/07 - 7:33오후
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를 빼고 선언하면 에러는 없습니다.
왜 이런 에러가 나는지 통 모르겠네요.
답변 부탁드립니다.
Forums:


K&R C입니다.
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
Re: K&R C입니다.
ANSI-C 이야기를 하면서 컴파일러의 특성을 고려해 const 를 빼자는 의견은
서로 상충됩니다. const/volatile 은 ANSI-C 에 공식적으로 추가된 것입니다.
--
Jun, Woong (woong at gmail.com)
http://www.woong.org
[code:1] 첫번째 int foo(const char
첫번째 int foo(const char * ch, int n ) { ... return 1; } 두번째 int foo(ch, n) const char *ch; int n; { ... return 1; }첫번째 방법으로 정의하든 두번재 방법으로 정의 하든 에러는 같은 에러가 나네요. 왜일까요?
[quote="gkepsgds"][code:1] 첫번째 int
다른 부분을 "완전히 배제한" 순수한 다음 코드가 제대로 번역되지 않는지요?
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
[quote="전웅"][code:1]int foo(const ch
위의 코드만으로 컴파일 하니 에러가 발생하지 않더군요. ㅠ.ㅠ
제가 사용하는 옵션은 -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에서 컴파일이 잘 되지 않은적
혹시나 해서 글을 올립니다.
저도 HP에서 컴파일이 잘 되지 않은적이 있어서요..
제가 사용한 컴파일러의 버전은 잘 모르겠고..
아무튼 각 변수선언시 초기값을 주면 컴파일 에러가 난적이 있더군요..
int i = 1; // 이렇게 하면 에러가....왜 그런지는 저도 잘 모르겠습니다.. ^^;
가끔은 밥을 굶어도 살 수 있다.
[quote="gkepsgds"][code:1]int foo(co
글 올리시면서 생략하신 부분에 문제가 있는 듯 합니다. 그리 방대하지
않다면 문제가 되는 부분을 가감없이 올리시는 것이 도움이 되지 않을까
생각합니다.
--
Jun, Woong (woong at gmail.com)
http://www.woong.org
댓글 달기