여러가지 좀 황당한 질문들
C 프로그래밍을 시작한 지 얼마 되지 않은 사람입니다.
미숙하지만 다음과 같은 상황에 대한 적절한 해답을 구합니다.
1. 변수 선언에 있어서 다음과 같이 할 수는 없는 것인가요?
int count;
for(count=1;count<=12;count++)
;
instead of
for (int count=1;count<=12;count++)
;
2. cpp 어디에도 typedef 처리 과정이 없는 것 같습니다.
typedef은 cc에서 처리되는 것입니까?
만약 cc에서 처리된다면 #define 처럼 단지 textual substitution
기능만 있는 것입니까?
3. 다음과 같은 코드에서의 문제점입니다. The C Programming Language
에서 나온 코드입니다.
#define cat(x,y) x##y
cat(cat(1,2),3)
cat(1,2)##3
cat(1,2)3
매크로가 적용된 후의 cat(1,2)3은 rescan 시 매크로를 적용할 적절한
토큰을 찾을 수 없으므로 원하는 결과인 123을 만들어 내는데 실패한
것 같습니다.
#define cat(x,y) x##y
#define xcat(x,y) cat(x,y)
xcat(xcat(1,2),3)
cat(xcat(1,2),3)
xcat(1,2)##3
xcat(1,2)3
이 또한 같은 경우로 원하는 결과인 123을 만드는데 실패해야 하는 것
아닌가요? 그런데 책에는 123이라는 결과가 나오는 걸로 되어 있군요.
Re: 여러가지 좀 황당한 질문들
지나가는 이 wrote..
C 프로그래밍을 시작한 지 얼마 되지 않은 사람입니다.
미숙하지만 다음과 같은 상황에 대한 적절한 해답을 구합니다.
1. 변수 선언에 있어서 다음과 같이 할 수는 없는 것인가요?
int count;
for(count=1;count<=12;count++)
;
instead of
for (int count=1;count<=12;count++)
;
instead of 앞뒤가 바뀐 것 같은데.. 어쨋건 c에서는 for (int a;..)
는 안됩니다. block의 첫 부분에서만 변수 선언이 가능합니다.
2. cpp 어디에도 typedef 처리 과정이 없는 것 같습니다.
typedef은 cc에서 처리되는 것입니까?
만약 cc에서 처리된다면 #define 처럼 단지 texture substitution
기능만 있는 것입니까?
typedef는 아마 preprocessor가 처리하는게 아니라 cc가 처리하는
것일 겁니다. texture substitution만 있는 것은 아니고,
문법상으로 type의 위치에만 올 수 있고, 그렇지 않으면 에러를 냅니다.
3. 다음과 같은 코드에서의 문제점입니다. The C Programming Language
에서 나온 코드입니다.
#define cat(x,y) x##y
cat(cat(1,2),3)
cat(1,2)##3
cat(1,2)3
매크로가 적용된 후의 cat(1,2)3은 rescan 시 매크로를 적용할 적절한
토큰을 찾을 수 없으므로 원하는 결과인 123을 만들어 내는데 실패한
것 같습니다.
#define cat(x,y) x##y
#define xcat(x,y) cat(x,y)
xcat(xcat(1,2),3)
cat(xcat(1,2),3)
xcat(1,2)##3
xcat(1,2)3
이 또한 같은 경우로 원하는 결과인 123을 만드는데 실패해야 하는 것
아닌가요? 그런데 책에는 123이라는 결과가 나오는 걸로 되어 있군요.
##는 매크로 안에서만 쓸 수 있습니다.
댓글 달기