parser error 가 자꾸 나는데요 이유 좀 알려주세요....
글쓴이: miso / 작성시간: 수, 2003/04/02 - 5:53오후
헤더 파일 제일 처음에 다음과 같이 선언 되어 있습니다.
============
#define printf if (1) {} else printf
#define malloc(size) if (size = ((1 + size % 512) * 512)) malloc (size)
#include <stdio.h>
#include <stdlib.h>
==========
컴파일은 하면
#include <stdio.h>를 가르키고
에러 메세지는 parse error before `if'라고 나오면서 컴파일이 되질 않습니다....
무엇이 문제인지 고수님들 알려주세요.... ㅜ.ㅜ;;;
Forums:
[code:1]#include <stdio.h>#inclu
위와 같이 include는 제일 처음에 써주셔야 합니다.
Re: parser error 가 자꾸 나는데요 이유 좀 알려주세요....
stdio.h 및 stdlib.h 인클루드 전에 printf 와 malloc 이 #define 됐으므로,
전처리기는 stdio.h 및 stdlib.h (또는 그 안에 인클루드된 헤더)
의 printf 와 malloc을 #define 한 것으로 대체합니다.
결국 저 구문이 헤더 안 에 들어앉게 되어 에러죠.
앗 늦었군요. -_-
Orion Project : http://orionids.org
그런데...
그런데 이소스는 제가 코딩한 소스가 아니라......
이미 만들어진 소스를 제가 다시 한번 컴파일 해 보는 건데요....
제가 아는 사람이 만든 소스가 아니라 저희 회사 사람이 소스를 분석하라고 해서 분석하는 도중에 한번 컴파일을 해보려고 하는데...
main 함수가 있는 곳 즉 처음부터 막히네요.....
제가 알기로는 헤더 파일에 정의 되어 있는 값을 변경하려면.....
헤더 파일을 include하기 전에 변경하려는 값을 define 해주면 된다고 알고 있는데 아닌가요?
이사람도 stdio에 정의 되어 있는 함수를 변경하려고
#define printf if (1) {} else printf
#define malloc(size) if (size = ((1 + size % 512) * 512)) malloc (size)
이것을 헤더 파일 전에 define 하지 않았을까 생각이 드는데....
*^^*
/usr/include/stdio.h의 278번째줄[code:1]ex
/usr/include/stdio.h의 278번째줄
extern int printf (__const char *__restrict __format, ...) __THROW;
위에 macro를 적용하면
extern int if(1) {} else printf (__const char *__restrict __format, ...) __THROW;
위와 같이 됩니다.. 그래서 에러가 나는거죠..
저.... 이해가 잘 안가는데요....
고물님의 말씀이 이해가 잘 안돼는데... 쉽게 설명해주시면 안될까요?
제가 C를 시작한지 얼마 안돼고 또 linux C를 시작한지는 한 6달 정도 밖에는 안되거든요.... ^^;;;
*^^*
[code:1]#define printf if (1) &#
위의 코드라고 했을 경우 stdio.h를 포함하게 됩니다.
stdio.h는 아래와 같이 함수부분이 선언되어 있습니다.
이때 먼저 define으로 printf를 선언해버렸기 때문에
나중에 include한 stdio.h의 내용들도 define 선언에 의해서 치환이 되게 됩니다.
/usr/include/stdio.h의 278번째줄
extern int printf (__const char *__restrict __format, ...) __THROW;
위의 코드에서 printf를 define으로 선언한 printf if (1) {} else printf 를 적용시키면 아래와 같이 됩니다.
extern int if(1) {} else printf (__const char *__restrict __format, ...) __THROW;
위에서 보면 함수 형을 선언한 것인데 define으로 바뀌어 버려서 문법적으로 맞지 않게 됩니다. 그렇기 때문에 에러가 나는 것입니다.
그런데.....
지금 제가 분석하는 소스가 지금 서비스 되고 있는 서버 소스인데요....
이것이 문제가 된다면.... 지금 돌아가고 있는 서비스는 어떻게 된건지...ㅡㅡ????
혹시 소스 작성된 날짜를 보니깐 2000년도에 만들어 졌는데.... 2000년도 stdio.h와 지금 2002년도 stdio.h 파일이 달라서.....
아님 그때 커널 소스와 지금의 커널 소스가 달라서 그렇수도 있나요?.....
아님 말도 안돼는 소린가?
어찌된 영문인지.....
만약에 이소스를 제 PC에서 컴파일 하려면...
코드:
#define printf if (1) {} else printf
#define malloc(size) if (size = ((1 + size % 512) * 512)) malloc (size)
을 주석을 달면 되나요?.....
저는 이소스를 전혀 수정하지 않고 그대로 컴파일 해보고 싶은데.... ㅡㅡ;;;
방법이 없을까요?
*^^*
네.. 주석처리 하세요.아니면 현재 서비스 되고 있는 서버에서 컴
네.. 주석처리 하세요.
아니면 현재 서비스 되고 있는 서버에서 컴파일 해보시던지요.
댓글 달기