C synatx에 대한 질문
글쓴이: eminency / 작성시간: 화, 2003/07/08 - 11:10오후
int a[3]={0,1,2}; printf("%d\n",1[a]);
위와 같이 실행했을 경우 1이 출력되는데.. gcc에서만 그런건가요? -_-;;
귀찮아서 C의 BNF 문법 같은 건 살펴보지 않았습니다만... C에서는 배열의 이름과 index를 따로 구분하지 않고 그냥 주소값으로 계산하기 때문인가요? 즉 위같은 경우는 1+a로 해석하기 때문에...?
1[a] 대신 (1+1)[a]라든가 등등으로 해 보았는데 문법상으로도 그렇고 실행도 잘 되네요..ㅡ.ㅡ;;
거 참...-_-; 물론 파이썬이나 루비 등등 최근 나온 스크립트 언어들에서는 에러가 납니다. 다른 데서는 안해봤는데 아마 에러가 날 거 같고...ㅡ.ㅡ;;
많은 분들의 고견을 부탁드립니다.[/code]
Forums:
배열은 포인터이기 때문입니다.
C 에서 배열이란 것은 포인터로 변환되어 계산되기 때문입니다.
위의 코드에서 a + 3과 3 + a는 같은식입니다.
따라서 전혀 문제되지 않는 코드입니다.
진리를 나의 수준으로 끌어내리지 마라.
나를 진리의 수준으로 끌어올려라. - 배꼽 중에서
기가막힌 발상이네요.gcc 너무 좋은거 아닌가? 결론은 세상에
기가막힌 발상이네요.
gcc 너무 좋은거 아닌가?
결론은 세상에서 제일 좋은 컴파일러 = gcc
:D
gcc에서만 되는 건 아닐거예요.c 표준이 아닐까 생각해봅니다.
gcc에서만 되는 건 아닐거예요.
c 표준이 아닐까 생각해봅니다.
그리고 gcc가 아주 좋은 compiler이긴 하지만,
사실 가장 좋은 compiler는 대부분 ( 좋다는 걸 performance로 본다면요. )
cpu를 만드는 vendor들이 내놓는 것들이죠.
gcc가 그런 compiler들에 비하면 최적화 정도가 떨어집니다.
( 대신 portability 측면에선 압도적이겠죠. )
뭐 여튼 이제 gcc가 무시할만한 레벨에 있는게 아니라
여러 vendor들이 직접 gcc 개발에
울며 겨자먹기로 참여하고 있는것으로 알고 있습니다.
gcc 사용자들이 '어 이 cpu는 뭔가 떨어지네' 해서는 그들로선 곤란하니까요.
C 표준 맞습니다...
C 표준 맞습니다...
address of
소시적에 밥벌이가 아닌 하나의 과목으로 공부했을 때 책에서 본게 생각나는 군요.
[] 연산자의 정식 명칭은 address of 입니다. 즉, 일반적으로 생각하는 배열의 member를 참조하는 것(실제 행동은 그럴지라도....^^;)과는 약간 다른 것으로 파악될 수 있죠.
-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂
[quote]기가막힌 발상이네요. [/quote]여기에 한표 :D
여기에 한표 :D
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
Re: address of
정식 명칭이 "address of" 인 연산자는 C 언어에 없습니다. 다만, 명칭이
"address operator" 인 단항 & 연산자가 있습니다 - 그 연산자를 프로그램
소스 내에서 읽을 때 관례적으로 "address of" 라는 읽을 뿐입니다.
[] 는 배열 첨자 지정 연산자 (array subscripting operator) 로 연산자
자체가 포인터 참조 연산자 (indirection operator) 로 정의되어 있습니다.
이것이 바로 위와 같은 이상한 형태의 연산이 문제 없이 허락되는 이유입니
다 - 어셈블리어에 익숙하신 분들에게는 많이 이상해 보이지도 않을 것이라
생각합니다만...
그와 같은 트릭은 주로 IOCCC 같은 곳에서나 사용되지만, 경우에 따라 어떤
implementation 이 표준 라이브러리를 잘못 제공하는 경우 (예를 들어,
가변 인자 접근에 사용되는 va_end() 매크로를 #define va_end() (void)0
로 잘못 제공하는 경우 등) 문제가 있음을 증명하기 위해 쓰일 수도 있습
니다.
그럼..
--
Jun, Woong (woong at gmail.com)
http://www.woong.org
Re: address of
예전 텍스트를 꺼내어 인덱스를 찾아보니 정식 명칭이 "address of "인 연산자는 '&'이군요... -_-;;
왜 몇년동안 그렇게 알고 있었는지.... -_-;;
-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂
Re: address of
"address of" 는 단항 & 연산자의 "구어적인" 명칭입니다. "정식" 명칭은
그냥 "address operator" 라고만 해주시면 됩니다.
--
Jun, Woong (woong at gmail.com)
http://www.woong.org
그냥 덧 붙여 봤읍니다. :D The array subscriptin
그냥 덧 붙여 봤읍니다. :D
The array subscripting operation is defined so that E1[E2] is identical to *(E1 + E2). Therefore, despite its asymmetric appearance, subscripting is a commutative operation.
- from The C programming language, pp. 217[/u]
Gands considered it the height of presumption to use personal pronouns to refer to themselves, because it arrogantly assumes the listeners know who the speaker is.
댓글 달기