Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[JW] 포스팅된 글중 표준관련 부분

27 views
Skip to first unread message

myco...@hanmail.net

unread,
Jul 25, 2001, 2:03:27 AM7/25/01
to
안녕하세요? 근신중인(^^) 전웅(Jun Woong, myco...@hanmail.net) 입니다.

메일과 홈페이지에 올라온 질문 때문에 뉴스그룹의 몇몇글을 읽다가 표준과
관련된 내용중 틀린 부분에 (모두 모아서 --;) 답변드립니다. 활동을 다시
시작하는 것은 아니니 너무 염려마시기 바랍니다.

여러분이 표준에 관심을 가져주시고, 표준을 바탕으로 활동해 주시는 모습
은 저로서는 반가운 일이지만, 답변의 근거로 표준을 언급하 실 때는 그만
큼 근거로서 큰 힘을 가지는 만큼 좀 더 신중을 기해 주시기를 감히 부탁드
립니다.

제가 글을 포스팅한 것에 대해 불만을 표시하시고 싶으신 분은 가급적 개인
메일을 이용해 주시기를 거듭 부탁드립니다. 저로 인해 다시 한번 그룹이
비기술적인 내용으로 채워지는 것을 바라지 않습니다. 그럼, 더운 여름 즐
거운 공부 되시기를 바랍니다.

----------------------------------------------------------------------
"?νø? <ttl...@korea.com> wrote in message news:<9jjp91$fin$1...@news.netple.com>...
> c표준문서는(c99) 무엇이며,
> 볼 수 있는 방법은 무엇입니까?

C 표준문서는 유료입니다. 국내 표준 기관나 국외 표준 관련 기관에서 구입
하실 수 있습니다. 표준에 대한 몇가지 내용은 제 홈페이지 [프로그래밍] -
[기타 문건] 의 "C 언어의 역사", [질답 게시판] "C 표준안 자료 어디서
구할수 있을까요?" 를 참고하시기 바랍니다.

----------------------------------------------------------------------
sha...@FILTER.aipiri.yonsei.ac.kr wrote in message news:<9jjbkc$se0$1...@news.netple.com>...
> [..]
> >void main( void )
> >{
> >/**/ exit(0);
> >}
>
> int main()으로 수정하시길 권장합니다.
>
> [..]
> >위에서 exit(1) 과 exit(0)가 나오는데 1과 0이 나타내는것이 정확히
> >무엇인지요? True or False인가요?
>
> C PL에서의 관심영역이 아닙니다. 예를들어 어떤 함수의 되돌림 값
>(return value)가 어떤 의미이고 어떠한 행동으로 연결되는지는 사용자가
>결정하는 것처럼, exit(),main(시작 지점(startup-entry point)로 정의된
>함수)의 마지막 '}', return 문을 만났을때 돌려지는 값 자체의 의미는 그
>프로그램을 사용하는 주-환경(hosted environments)에 의해 결정이 됩니다.

부정확한 표현입니다. 정확히는 실행환경 (execution environment) 이라는
용어를 사용해야 합니다. C 에는 2개의 실행환경이 있습니다. 그 중 하나가
hosted environment 일 뿐입니다.

그리고, C 가 exit() 나 초기 호출 main() 에 의해 반환되는 값에 아무런
의미를 부여하지 않고 자의적인 해석을 허락하는 것은 아닙니다. 자세한
내용은 제 홈페이지 [hclc 게시판], "main() 에서 return 0; 을 하는 이유"
를 참고하시기 바랍니다.

----------------------------------------------------------------------
sha...@FILTER.aipiri.yonsei.ac.kr wrote in message news:<9j94d5$a7n$1...@news.netple.com>...
> >모든 pointer변수는 주소값을 저장하기 위한 4byte의
> >영역을 가집니다.
>
> undefined in ISO C
>

더 정확히는 unspecified 입니다.

> >따라서 모든 pointer변수의 size는 동일하게 4byte입니다.
>
> undefined in ISO C

unspecified behavior

>
> >
> >int *a;
> >long *c;
> >char *c;
> >RECV_INAP_MSG_PA *pstPacket;
> >
> >sizeof(a) -> 4byte
> >sizeof(b) -> 4byte
> >sizeof(c) -> 4byte
> >sizeof(pstPacket) -> 4byte
>
> >실제 구조체의 size를 알고자 할때는
> >sizeof(RECV_INAP_MSG_PA)라고 하면 구조체의 size를 return
> >받을수 있습니다.
>
> struct가 abstract machine상에서 점유하는 공간의 크기를 알고자 할때는
> sizeof operator를 사용해 (stroage unit의 n배로써) 크기를 알아낼 수 있습니다.

sizeof 의 결과는 storage unit 의 n 배가 아니라 byte 단위의 크기입니다.
물론 C 에서 byte 는 항상 8비트는 아닙니다.

----------------------------------------------------------------------
"YoungKwan Kim" <br...@netsgo.com> wrote in message news:<5YmTSO1...@news2.sys.netsgo.com>...
> 먼저 두가지로 생각해 봐야 합니다.
> 1. void
> 2. void *
> void와 void*는 약간 다른 성격입니다.
> void는 말 그대로 아무것도 없다는 뜻입니다.
>
> 하지만 void *는 약간 다릅니다.
> void* (void포인터)는 포인터인데 type이 없다는 뜻입니다.

type 이 없다는 뜻이 아니라, generic pointer 입니다. void * 와 void 는
본질적으로 큰 관련이 없습니다. (그냥 구실 좋게 void * 를 generic
pointer 에 빌려 쓴 것 뿐입니다 - 그로인해 언어 정의상의 많은 이상한 해
석을 허락하기도 했었습니다) 사실상 void * 는 char * 와 같은 표현, 같은
정렬제한을 갖도록 요구됩니다. 대입 호환성 (assignment compatibility)
을 갖는다는 점을 제외하면 (즉, 적절히 명시적인 캐스팅을 모두 해준다면)
void * 없이도 char * 로 generic pointer 를 사용할 수 있습니다 (실제로
pre-ISO 에서는 그렇게 했지요). 주의하실 점은 void * 는 object pointer
의 generic pointer 이지, function pointer 의 generic pointer 가 아니라
는 점입니다.

[...]

----------------------------------------------------------------------
>>이론대로하면 factorial이 long로 선언되었으니까 그 보다 큰 값은 잘려
>서 잘린값이 계산되서 의미는 없지만 뭔가 값이 나와야 할거 같아서요..
>
>Type의 허용가능한 set of values의 범위를 넘어선 연산에 대해 표준은
>아무런 보장도 하고 있지 않습니다. limit.h에 선언되어있는 각 Type의
>보장받는 범위에 대해 살펴보시기 바랍니다.

type 에 따라 다릅니다. overflow 가 발생할 수 없는 type 도 있습니다.

----------------------------------------------------------------------
>안녕하세요...
>
>제가 보기에...
>http://pcrc.hongik.ac.kr/~progman/index.shtml
>위 사이트가 아주 많은 도움이 될 듯 하네요...
>

이 사이트에 있는 많은 자료에 틀린 내용이 많습니다. ANSI-C 나 ISO-C 라
는 이름을 내새우며 잘못된 내용이 많기 때문에 유의하셔야 합니다. 예를
들면 위의 사이트에서 가져온 문제중 일부입니다. (문제의 제목이 "표준 C
라이브러리 (유형 1)" 라고 밝히고 있습니다)


* main에 대한 설명 중 맞는 것은?

1 int main (int argc, char *argv[])는 ANSI 표준이다.
2 최신의 ANSI 표준에 따르면 main을 void type으로 하는 것을 허용한다.
3 int main (void)는 ANSI 표준이 아니다.
4 main에서 return 문장을 쓰는 것은 exit 함수를 쓰는 것과 완조니 별개이다.

여기서는 답을 1번으로 하고 있는데, 4번도 매우 틀린 내용은 아닙니다.
main() 에서의 return 과 exit() 의 사용이 유효한 차이를 가져오는 예는
얼마든지 있습니다.


* 다음 expression 중 값이 0이 아닌 것은? (int i;로 선언되어 이따고 가정)
1 i ^ i
2 i - i
3 i >> sizeof (i)
4 i & ~i

int 가 i 로 선언되어 있기 때문에, i 의 값이 무엇이냐에 따라 답은 달라
질 수 있습니다. (사실상 이 문제에서는 i 의 초기화 여부조차 이야기하지
않고 있습니다) i 에 가해지는 bitwise 연산은 implementation-defined 일
가능성이 큽니다. 문제를 올바르게 바꾸기 위해서는 i 를 unsigned int 로
선언하고 초기화 했어야 합니다. 이 외에도 이와 유사한 비트 연산자를 사
용하는 대부분의 문제는 틀린 것입니다.


* 다음 중 틀린 것을 골라바라.
1 malloc으로 할당한 모든 메모리는 프로그램이 종료할 때 자동으로 free된다.
2 fopen으로 연 파일들은 프로그램이 종료할 때 자동으로 fclose된다.
3 Null pointer를 얻기 위해서는 반드시 NULL을 써야 한다. 0을 대신 쓰는 실수를 하면 클난다.
4 상수 0의 type은 int이다.

clc FAQs 를 보고 만든 문제인 듯 한데, 답은 3번이라고 말하고 있지만, 1
번도 올바른 내용이 아닙니다.

----------------------------------------------------------------------
그리고, 아래는 제 홈페이지 [자유 게시판] 에서 답변한 내용입니다 (그 점
을 염두하고 읽어주시기 바랍니다).

>> struct man {
>>
>> int age;
>> char name[10];
>> };
>>
>> int main() {
>>
>> struct man ko;
>>
>> ko.age = 12;
>> ko.name = "noname";
>
>배열은 expression에 사용이 될 경우 constant pointer로 conversion이
>됩니다(sizeof는 제외). 따라서 위의 수식은 불법입니다.

constant pointer 라는 것은 없습니다. [hclc 게시판] 의 "Re: 포인터와 배
열에 대한 개념차이" 라는 글을 보시기 바랍니다. 국내의 많은 책과 사람들
이 "포인터 상수", "constant pointer" 등의 용어를 사용하고 있지만, 올바
른 개념이 아닙니다. 위 대입식에서 배열에 "noname" 을 가르키는 포인터를
대입할 수 없는 이유는 배열이 lvalue 이기는 하지만, modifiable lvalue
가 아니기 때문입니다.

또한 배열이 포인터로 decay 되지 않는 경우로는 sizeof 의 피연산자 뿐 아
니라 아래와 같이 3가지 경우가 있습니다.

1. sizeof 의 피연산자
2. & 연산자의 피연산자
3. array of char 를 초기화하는데 사용되는 string literal
예: char str[20] = "ABCDE";

이 배열, 포인터 문제와 관련해서는 [hclc 게시판] 에 이미 많은 글이 올라
와 있습니다. 읽어보시면 도움이 되리라 생각합니다. 예를 들면,

"배열, 포인터, malloc 의 관계"
"포인터 관련 질문"
"배열 초기화하기와 memset"
"포인터와 배열에 대한 개념 (2)"
"포인터와 배열에 대한 개념차이"

[...]


----------------------------------------------------------------------
>>> ko.age = 12;
>>> ko.name = "noname";
>>
>>배열은 expression에 사용이 될 경우 constant pointer로 conversion이
>>됩니다(sizeof는 제외). 따라서 위의 수식은 불법입니다.
>>
>>> 구조체 멤버중에 배열을 위와같이 초기화 시키는게
>>> 왜 잘못된것인가요? 멤버들을 올바르게 초기화 시키려면
>>> 어떻게 해야 하는지요?
>>
>>struct man m1={12,"noname"};
>>
>>과 같이 사용하시는 것이 initialization입니다.
>>
>
>왜 그렇게 해야만 되죠?
>멤버의 값을 프로그램 수행도중 변경해야 할 경우엔 어떡하죠?
>

여러가지 방법이 있을 수 있습니다. 배열의 요소 각각에 따로 접근하려면,

ko.name[2] = 'A';

등이 있을 수 있고,

ko.name[0] = 'A';
ko.name[1] = 'B';
ko.name[2] = '\0';

위와 같은 작업을 쉽게 해주는 것이

strcpy(ko.name, "AB");

일 뿐입니다. 즉, strcpy() 라는 표준 라이브러리 함수 내에서도 (겉으로
보기에는) 위와 같은 여러번의 대입 작업을 (대부분의 경우 훨씬 더 효율적
으로) 대신 해주고 있는 것 뿐입니다.


----------------------------------------------------------------------
>[..]
>>>struct man m1={12,"noname"};
>>>과 같이 사용하시는 것이 initialization입니다.
>[..]
>>왜 그렇게 해야만 되죠?
>
>초기화(initializaion)란 메모리 할당과 동시에 저장 공간(stroage space
>: r-value)내에

storage space 라는 용어보다는 그냥 storage 라는 용어를 사용합니다. 그
리고 값을 저장할 수 있는 storage 는 lvalue 로 보는 것이 더 바람직하며
사실상, storage 와 lvalue 에는 깊은 관련이 없습니다. 이 둘을 묶어서 생
각하는 것이 편할지 모르지만, 연결해서 생각해 두면 후에 복잡한 문제를
만날 수 있습니다. lvalue 의 정확한 정의에 대해서는 [hclc 게시판] 의 아
래 글을 참고하시기 바랍니다.

"C 에서의 lvalue 의 정의"

>특정 값을 넣는 것입니다. OP의 질문은 분명 struct의 초기화에 대한 질문이었습니다.
>
>ISO C에서는 거의 대부분의 변수 선언(declaration)에 초기자
>(initializer)를 포함하고 있으며,

무슨 말씀을 하고 싶으신지는 모르겠지만, 문법적으로 선언에 초기치가 주
어질 수 있다는 뜻이라면. 문법적으로는 모든 대상체의 선언에 초기치가 주
어질 수 있습니다. 물론, 선언되는 대상체의 type 이 무엇이냐에 따라 초기
치가 있으면 안 되는 경우가 있을 뿐이지요.

> 이를 통해서만이 위와같은 일을 해 줄 수 있습니다(만일 지정되지 않은
> 초기자를 사용할 경우 이 할당 결과는 예측불가능(unpredictable)합니다.).

"지정되지 않은 초기자"? 이 부분도 무엇을 이야기하고 싶으신지 잘 모르겠
지만, 다음 2가지중 하나를 설명하고 싶으신 듯 합니다.

1. 초기치에 주어질 수 있는 type 은 대입 변환 (assignment conversion)
에 의해 허락된 것이어야 함.

예: int p = (int *)0; /* invalid */

2. 명백한 초기치가 주어지지 않은 경우 그 대상체의 초기값은 storage
duration 에 따라 (auto, static, allocated) 초기치가 정의될 지 아닐
지가 결정됩니다. 예를 들어, 아래와 같은 포인터를 file scope 에서 정
의한다면,

int *pi;

이 놈은 명백한 초기치가 없어도 null pointer 로 초기치를 갖습니다.


----------------------------------------------------------------------
>
>[..]
>>멤버의 값을 프로그램 수행도중 변경해야 할 경우엔 어떡하죠?
>
>변경하고자 하는 구조체(structure)내의 구성요소(component)에 단순 할당

component 보다는 member 라는 용어를 사용합니다.

>연산자(simple assignment operators)를 적용해 값을 변경다십시요.
>단순 할당 연산자에는 '=,+=,/=,|=,*=,&='등이 있습니다.

simple assignment opertaor 는 = 하나 뿐입니다. op= 형태의 연산자는
simple assignment operator 가 아닙니다.


----------------------------------------------------------------------
>>[..]
>>>>struct man m1={12,"noname"};
>>>>과 같이 사용하시는 것이 initialization입니다.
>>[..]
>>>왜 그렇게 해야만 되죠?
>>
>>초기화(initializaion)란 메모리 할당과 동시에 저장 공간(stroage space : r-value)내에 특정 값을 넣는 것입니다. OP의 질문은 분명 struct의 초기화에 대한 질문이었습니다.
>>
>>ISO C에서는 거의 대부분의 변수 선언(declaration)에 초기자(initializer)를 포함하고 있으며, 이를 통해서만이 위와같은 일을 해 줄 수 있습니다(만일 지정되지 않은 초기자를 사용할 경우 이 할당 결과는 예측불가능(unpredictable)합니다.).
>>
>
>말씀해주신 초기자(initializer)에 대해 조금 더 부연설명을 부탁드려도 될까요?
>

위에서 다른 분이 말씀해 주신대로 초기화라는 것은 대상체를 위한 초기치
(그 대상체가 갖는 초기의 값) 를 명시해 주는 것입니다. 물론, C 에서는
대입 연산자를 통한 대입보다 초기화를 통한 대입(?)에 더 많은 융통성을
허락하고 있습니다 ({123, 234, 456} 형태로 초기치가 주어지는 구조체나
배열 초기화에서 알 수 있지요, 물론 C99 에서는 compound literal 이라는
것을 도입하여 이를 대입수식에서도 허락하고 있습니다 - 관련된 예는
[hclc 게시판] 의 "ANSI-C(C89), ISO-C(C90, C99)" 을 참고하시기 바랍니다).
또한 역으로, 대입에 초기화보다 더 많은 자유를 허락하고 있습니다 (예로
는, storage duration 이 static 인 대상체의 초기치에 주어지는 제약을 들
수 있습니다 - 보다 자세한 내용은 K&R2 RM 의 초기화 부분을 보시기 바랍
니다). 많은 분들이 설명을 용이하게 하기 위해 초기화를 대입과 유사한 것
으로 설명하지만, C 에서는 경우에 따라 초기화와 대입이 다를 수 있는 경
우가 있습니다 (array of char 에 "ABC" 등을 초기치로 주는 경우와 대입수
식에서 주는 경우가 분명한 예이겠지요).

K&R2 RM 의 초기화 (initialization) 부분을 보시면, 선언시 초기치에 대한
문법과 여러가지 허락, 제약 사항등을 공부하실 수 있습니다 (물론, 다른 C
책도 잘 다루고 있는 내용이라 믿습니다).


그럼...


--
Jun Woong (myco...@hanmail.net)
Dept. of Physics, Univ. of Seoul
Cell: +82 16 467 6247
Web : http://c-expert.uos.ac.kr


-----------------===== Posted via NetPle Usenet Service =====-----------------
http://news.NetPle.com 에 접속하시면 새로운 유즈넷이 열립니다.

sha...@filter.aipiri.yonsei.ac.kr

unread,
Jul 25, 2001, 3:50:02 AM7/25/01
to
[..]

>sizeof 의 결과는 storage unit 의 n 배가 아니라 byte 단위의 크기입니다.

ISO C에서 저장단위(stroage unit)는 byte로 지정이 되어있습니다. 따라서 올바른 답변입니다.

>물론 C 에서 byte 는 항상 8비트는 아닙니다.

지당하신 말씀이십니다.

sha...@filter.aipiri.yonsei.ac.kr

unread,
Jul 25, 2001, 3:58:08 AM7/25/01
to
[..]

>>초기화(initializaion)란 메모리 할당과 동시에 저장 공간(stroage space
>>: r-value)내에
>
>storage space 라는 용어보다는 그냥 storage 라는 용어를 사용합니다. 그
>리고 값을 저장할 수 있는 storage 는 lvalue 로 보는 것이 더 바람직하며

r-value에대해 살펴보신후 다시 생각해보시기 바랍니다. 저장공간(stroage space)는 저장될 곳의 시작지점과 구분하기 위해 사용하는 용어입니다.

>사실상, storage 와 lvalue 에는 깊은 관련이 없습니다.

r-value에 대해 아신다면 너무나 지당하신 말씀을 하신것이라고 생각됩니다.

>"C 에서의 lvalue 의 정의"

C에서 r-value는 정의가 안되어있는지 궁금하군요.

sha...@filter.aipiri.yonsei.ac.kr

unread,
Jul 25, 2001, 4:25:50 AM7/25/01
to

>>...constant pointer...

>...constant pointer 라는 것은 없습니다...modifiable lvalue

modifiable lvalue와 constant pointer라는 것의 의미적인 차이에 대해 이해가 가지 않는군요. 자세한 설명을 부탁드립니다(둘 가지가 차이가 있다면 왜 세계적인 거장들도 실수를 하는지 궁금합니다).

많은 책에 H&S4, ABC등의 유명서적이 포함되는 것은 유감이군요. 확실히 K&R2에선 constant pointer라는 용어를 사용하고 있지는 않습니다. 표준문서에서도 물론이고.

sha...@filter.aipiri.yonsei.ac.kr

unread,
Jul 25, 2001, 4:15:53 AM7/25/01
to
[..]
>>>>void main( void )
^^^^^
>>...돌려지는 값 자체의 의미는 그
>>프로그램을 사용하는 주-환경(hosted environments)에 의해 결정...

>부정확한 표현입니다. 정확히는 실행환경 (execution environment) 이라는
>용어를 사용해야 합니다. C 에는 2개의 실행환경이 있습니다. 그 중 하나가
>hosted environment 일 뿐입니다.

정확한 답변이었습니다. freestanding environment에서는 function call of starup entry point에 대해 아무런 제약을 하고 있지 않으며, main함수를 startup entry point로 정의된 상황에서의 되돌림값의 쓰임새는 당연히 hosted environments에서만 정의가 될 수 있습니다(물론 freestanding environment에서 main이라는 이름의 함수를 start-up으로 삼는다면 또 다른 얘기지만).

sha...@filter.aipiri.yonsei.ac.kr

unread,
Jul 25, 2001, 4:05:06 AM7/25/01
to
[..]

>>연산자(simple assignment operators)를 적용해 값을 변경다십시요.
>>단순 할당 연산자에는 '=,+=,/=,|=,*=,&='등이 있습니다.
>
>simple assignment opertaor 는 = 하나 뿐입니다. op= 형태의

실수했군요.

A compound assignment of the form E1 op= E2

myco...@hanmail.net

unread,
Jul 25, 2001, 5:04:08 AM7/25/01
to
시간관계상 역시나 모아서 답변합니다. 올바르게 쓰레드로 답변하지 않은
점 사과드립니다.

>[..]


>>>초기화(initializaion)란 메모리 할당과 동시에 저장 공간(stroage space
>>>: r-value)내에
>>
>>storage space 라는 용어보다는 그냥 storage 라는 용어를 사용합니다. 그
>>리고 값을 저장할 수 있는 storage 는 lvalue 로 보는 것이 더 바람직하며
>

>r-value에대해 살펴보신후 다시 생각해보시기 바랍니다. 저장공간(stroage
>space)는 저장될 곳의 시작지점과 구분하기 위해 사용하는 용어입니다.

표준의 Normative part 에는 rvalue 라는 용어가 없습니다. 그냥 value 라
는 용어를 대신 사용한다고 footnote 에서 밝히고 있습니다. 또한, storage
space 라는 용어 역시 없습니다 (님께서 의도하신 표현을 위한 용어로는
object 가 있습니다). 용어를 정확하게 따지지 않는다면 큰 무리가 없는 설
명일 수 있지만, "표준" 에 대해서 이야기하자면 둘 다 명확하지 않은 표현
입니다.

>
>>사실상, storage 와 lvalue 에는 깊은 관련이 없습니다.
>

>r-value에 대해 아신다면 너무나 지당하신 말씀을 하신것이라고 생각됩니다.
>

rvalue 는 그냥 "값" 입니다. 따라서, storage 에 저장되는 "값" 을 이야기
하고 계신 것이라면 rvalue 라는 표현이 맞습니다. 하지만, C 에서 본질적
으로 rvalue 는 storage 를 갖지 않습니다 (예를 들면 정수상수 100 은
storage 를 갖지 않으며, rvalue 입니다). storage 에 "값" 즉, rvalue 를
저장한다는 것은 그 storage 를 지정 (designating) 하는 lvalue 를 통해서
값을 저장하는 것입니다. 따라서, "(storage space : r-value)" 라는 표현
은 오해를 일으킬 수 있는 표현이라 생각합니다.

----------------------------------------------------------------------


>
>>>...constant pointer...
>
>>...constant pointer 라는 것은 없습니다...modifiable lvalue
>
>modifiable lvalue와 constant pointer라는 것의 의미적인 차이에 대해 이
>해가 가지 않는군요. 자세한 설명을 부탁드립니다(둘 가지가 차이가 있다
>면 왜 세계적인 거장들도 실수를 하는지 궁금합니다).

세계적인 거장들이 제대로 모르기 때문입니다. 이 lvalue, array, pointer
와 관련된 부분은 제대로 이해하기도, 또 제대로 설명하기도 어려운 부분으
로 유명합니다. 위원회에서도 이 부분을 어떻게 정의하느냐를 가지고 많은
고민을 했었습니다.

>
>많은 책에 H&S4, ABC등의 유명서적이 포함되는 것은 유감이군요. 확실히
>K&R2에선 constant pointer라는 용어를 사용하고 있지는 않습니다. 표준문
>서에서도 물론이고.
>

H&S4, ABC, K&R2 모두 표준이 아닙니다. 우리가 현재 "표준" 에 대해서 이
야기하고 있다면 그러한 모호한 표현을 사용하는 것은 바람직하지 않습니
다. constant pointer 라는 의미는 마치 배열이 rvalue 인 것같은 이미지를
내포하고 있습니다. 하지만, 엄연히 배열도 lvalue 입니다. 다만,
modifiable lvalue 가 아니기 때문에 대입 연산의 좌측 피연산자로 올 수
없는 것 뿐입니다.

우리 대부분은 (저도 초기에는) lvalue 는 대입 연산에서 좌측 (left) 피연
산자로 올 수 있는 수식이라고 알고 있습니다. 실제로 lvalue 라는 용어에
서 l (ell) 은 left 에서 따 온 것입니다. 하지만, C 표준에서는 이를 그렇
게 정의하지 않고 locator value 라고 정의하고 있습니다. (locator value
가 공식적인 용어는 아닙니다. Informative part 에서 사용된 용어입니다)
즉, (C90/C99 에서 발생하는 차이를 무시하고 대강 이야기하자면) storage
를 지정하는 모든 수식은 lvalue 입니다. 이러한 해석을 따르면 배열도 당
연히 lvalue 가 되며, modifiable lvalue 라는 개념을 도입해, 대입 연산자
의 좌측에 오는 것을 막는 것입니다. 많은 책에서 사용하고 있는 포인터 상
수 (constant pointer) 라는 개념은 많은 문맥에서 포인터로 변환되는
(decay) 배열을 설명하기에 편리한 개념이지만, 배열 자체가 lvalue 라는
사실을 잘못 전달할 수 있는 설명방법입니다. 배열이 포인터 "상수"가 되어
버리면, 배열을 피연산자로 수행할 수 있는 많은 연산이 모순에 빠질 수 있
습니다 (물론, 그러한 모순을 눈감고 지나간다면 결론적으로 얻게되는 실질
적인 프로그래밍 방법은 동일하겠지만).

----------------------------------------------------------------------
>[..]


>>sizeof 의 결과는 storage unit 의 n 배가 아니라 byte 단위의 크기입니다.
>

>ISO C에서 저장단위(stroage unit)는 byte로 지정이 되어있습니다. 따라서
>올바른 답변입니다.

실제 표준의 normative text 에서 인용된 용어나 표현이 아니라면, 근거로
표준을 사용하실 때 좀 더 신중을 기해주셨으면 하는 바램입니다. 표준은
storage unit 이라는 용어를 byte 를 가르킬 때 사용하지 않습니다. 표준은
byte 라는 명확한 용어를 정의해서 님이 storage unit 으로 표현하는 개념
을 사용하고 있으며, storage unit 라는 용어는 구조체/공용체에서 비트필
드가 존재하는 addressable storage unit 로 사용되는 용어입니다. 만약 표
준을 올바르게 기술하고 있다고 자부하는 책에서 byte 를 의미하는 것으로
storage unit 을 사용하고 있다면 조금 문제가 있는 부분이 아닌가 생각되
는군요.


--
Jun Woong (myco...@hanmail.net)
Dept. of Physics, Univ. of Seoul
Cell: +82 16 467 6247
Web : http://c-expert.uos.ac.kr

lhc_...@yahoo.co.kr

unread,
Jul 25, 2001, 5:25:58 AM7/25/01
to
constant pointer란 말은 C 표준에 나옵니다.
bjarne의 유명한 C++ 책에도 배열을 설명할 때 그 용어를 이용하고 있습니다.
다시한번 찾아 보시길.

myco...@hanmail.net

unread,
Jul 25, 2001, 5:43:17 AM7/25/01
to
>constant pointer란 말은 C 표준에 나옵니다.
>bjarne의 유명한 C++ 책에도 배열을 설명할 때 그 용어를 이용하고 있습니다.
>다시한번 찾아 보시길.
>

우선, C++ 과 C 는 (서로 영향 주고 있지만) 별개의 표준을 가지고 있는 다
른 언어입니다. C++ 책에서 Bjarne 이 constant pointer 라는 용어를 사용
한 것과 C 표준에서 constant pointer 라는 용어가 없는 사실과는 무관합니
다. (참고로 방금 찾아보니 C++ 표준에서는 constant pointer 라는 용어를
공식적으로 사용하고 있습니다. 이곳은 C 그룹이므로 이에 대한 설명은 생
략하겠습니다)

더욱이 C 의 창시자인 Dennis Ritchie 가 K&R2 에서 constant pointer 라는
용어를 사용한 것과 (물론 사용하지 않았습니다만) C 표준에 그러한 용어가
없는 사실과도 무관합니다. C 표준에 대해서 이야기하고 있는 것이라면 C
를 설명하고 있는 유명인사의 저서는 아무런 힘을 갖지 못합니다 (그러한
기술내용이 실제 표준의 text 로 추가되지 않는 이상). 단지 C 표준과 그것
이 참조하는 ISO 수준의 표준만이 표준으로서 강제력을 가질 수 있습니다.

그리고 그 용어는 C 표준에 나오지 않습니다.

이는 C 표준에 대한 오해 때문에 비롯된 듯 합니다. C 표준은 크게 두 부분
으로 구성되어 있습니다. 제가 다른 글에서 언급했듯이, 표준으로서의 강제
성을 갖는 Normative part 와, 그렇지 않은 Informative part 입니다.
"constant pointer" 라는 용어는 C99 표준 (final standard) 에 총 3번 나
옵니다. 그 3번은 모두 Informative part 입니다. 따라서, "C 표준에서
constant pointer 라는 용어를 사용했다" 라는 표현은 엄밀한 의미에서 틀
린 표현입니다.

설사, "constant pointer" 라는 용어가 Normative part 에 사용되었다고 하
더라도, 그 3군데에서 사용된 용어는 const 로 한정된 pointer 를 이야기하
고 있는 것이지, 배열을 설명하고 있는 부분이 아닙니다.


--
Jun Woong (myco...@hanmail.net)
Dept. of Physics, Univ. of Seoul
Cell: +82 16 467 6247
Web : http://c-expert.uos.ac.kr

sha...@filter.aipiri.yonsei.ac.kr

unread,
Jul 25, 2001, 6:04:05 AM7/25/01
to
[..]

>표준의 Normative part 에는 rvalue 라는 용어가 없습니다. 그냥 value 라
>는 용어를 대신 사용한다고 footnote 에서 밝히고 있습니다. 또한, storage
>space 라는 용어 역시 없습니다 (님께서 의도하신 표현을 위한 용어로는
>object 가 있습니다).

표준에서 사용하고 있는 용어는 아닙니다. 다만 PL을 이야기 할때 너무나도 자주 사용되는 용어기에 문제가 없으리라고 판단하였습니다. 제가 표준(ISO C)이라는 단서를 붙이지는 않았던 걸로 기억합니다만, 글 조각 하나하나마다 표준용어 아님이라는 표식을 달 수도 없는 노릇이고..

[..]


>>modifiable lvalue와 constant pointer라는 것의 의미적인 차이

많은 설명을 해 주신 것 같기는 한데 자세하게 이해는 가지 않는군요.

부가적인 정보제공을 하기 위해 C9X의 일부를 인용합니다.

-A modifiable lvalue is an lvalue that does not
have array type, does not have an incomplete type, does not
have a const-qualified type, and if it is a structure or
union, does not have any member (including, recursively, any
member or element of all contained aggregates or unions)
with a const-qualified type.

>...storage unit 라는 용어는 구조체/공용체에서 비트필


>드가 존재하는 addressable storage unit 로 사용되는 용어입니다. 만약 표
>준을 올바르게 기술하고 있다고 자부하는 책에서 byte 를 의미하는 것으로

>storage unit 을 사용하고 있다면 조금 문제가 있는 부분이 아닌가...

H&S4 162page. 문제가 있군요.

lhc_...@yahoo.co.kr

unread,
Jul 25, 2001, 7:18:44 AM7/25/01
to
제가 가지고 있는 문서는 draft이긴 하지만 최종 표준과 거의 차이가
없을 것이다라는 점을 먼저 말씀 드리겠고요

6.7.5.1 Pointer declarators [#3]을 보시면
int *const constant_ptr; 을 constant pointer이라 지칭하고 있습니다.

더 할 말 없으시겠죠?

myco...@hanmail.net

unread,
Jul 25, 2001, 7:24:19 AM7/25/01
to
>[..]
>>표준의 Normative part 에는 rvalue 라는 용어가 없습니다. 그냥 value 라
>>는 용어를 대신 사용한다고 footnote 에서 밝히고 있습니다. 또한, storage
>>space 라는 용어 역시 없습니다 (님께서 의도하신 표현을 위한 용어로는
>>object 가 있습니다).
>
>표준에서 사용하고 있는 용어는 아닙니다. 다만 PL을 이야기 할때 너무나
>도 자주 사용되는 용어기에 문제가 없으리라고 판단하였습니다.

예, 일반적으로 많이 사용되는 개념임에는 확실합니다. 이거 제 지적으로
인해 또 원하지 않는 상황이 전개될까 걱정되는군요. 제가 답변드린 바는
rvalue 가 표준에 없는 용어이므로 사용하지 말라는 뜻이 절대로 아닙니다.
다만, "(storage space : r-value)" 라는 표현이 마치 storage space 와
r-value 를 동일시하는 표현으로 이해될 수 있음을 말씀드린 것 뿐입니다.
오해 말아주셨으면 합니다.

>제가 표준 (ISO C)이라는 단서를 붙이지는 않았던 걸로 기억합니다만,

예, 사실입니다. 오해를 줄이기 위해 가능한 표준에서 명확한 정의를 제공
하는 용어를 사용하면 좋겠지만, 위에서 말씀드렸듯이 저는 표준에 없는 용
어를 사용했다는 사실만으로 올바르지 않다고 말씀드리는 것이 아닙니다.
님과 저의 개념 자체는 동일한데 표현에서 오해가 있었던 것이라 생각되는
군요. "object 에 lvalue 를 통해 rvalue (혹은 value) 를 저장한다" 라는
식으로 표현해 주셨으면 오해가 발생하지 않았을 것이라 생각합니다.

>글 조각 하나하나마다 표준용어 아님이라는 표식을 달 수도 없는 노릇이고..

물론 그러실 필요 없습니다.

>
>[..]
>>>modifiable lvalue와 constant pointer라는 것의 의미적인 차이
>
>많은 설명을 해 주신 것 같기는 한데 자세하게 이해는 가지 않는군요.

예, 이해가 어려운 부분입니다. 안타까운 점은 그 부분이 설명도 어려운 부
분입니다. 위원회에서도 이 부분의 이해를 위해 많은 노력을 기울인 것으로
알고 있습니다. 미묘한 부분이지만, 설명을 열심히 해보겠습니다.

>
>부가적인 정보제공을 하기 위해 C9X의 일부를 인용합니다.
>
>-A modifiable lvalue is an lvalue that does not
>have array type, does not have an incomplete type, does not
>have a const-qualified type, and if it is a structure or
>union, does not have any member (including, recursively, any
>member or element of all contained aggregates or unions)
>with a const-qualified type.
>

이 문제의 해결을 위해서는 modifiable lvalue 가 아니라 lvalue 의 정의가
필요합니다. 다른 글에서도 말씀드렸듯이 lvalue 의 정의는 C90 과 C99
(final standard)/C9X (N869, draft) 가 서로 다릅니다. (이 부분에서는 차
이가 없지만, C9X 는 C99 와 "많은 유효한(!)" 차이를 가지고 있습니다. 따
라서 C9X 를 근거로 사용하실 때는 final standard (C99) 가 아님을 밝혀주
셔야 오해를 줄일 수 있습니다 - 제가 csc 에서 그렇게 하지 않았다가 좀
고생을 했었습니다 ^^;)

아래는 C99 에서의 lvalue 의 정의입니다. (C9X 에서도 동일)

An lvalue is an expression with an object type or an incomplete type
other than void; [...]

해석 (번역이 아니라) 을 해드리자면, 일단 표준에서 object 와 object
type 이 다르다는 것에 유의하셔야 합니다 (말장난 같지만, 표준에서는 부
정관사 a(n) 냐, 정관사 the 냐에 따라 해석이 달라질 수 있는 부분도 있습
니다 - 영어 문화권이 아닌 사람들에게는 매우 짜증스러운 부분이죠, 제가
표준 공부하는 바람에 성격이 더러워진 것 같습니다 ^^). complete array
type 은 object type 이며, incomplete array type 은 incomplete type 입
니다. 따라서, 모든 array 는 lvalue 입니다 (array of void 는 선언 자체
에서 배제됩니다).

그리고, array type 은 님이 인용해 주신 부분에 의해, modifiable lvalue
에서는 배제됩니다. (complete 든 아니든 array type 을 정의에서 배제하고
있지요) 그리고 assignment operator 의 constraints 에서 보실 수 있듯이
좌변 피연산자로는 modifiable lvalue 가 와야 합니다. 따라서, modifiable
lvalue 가 아닌 array type 수식은 좌변에 올 수가 없습니다.

참고로 아래는 C90 에서의 lvalue 의 정의입니다.

An lvalue is an expression (with an object type or an incomplete type
other than void) that designates an object: [...]

이 부분이 바뀌게 될만한 아주 미묘한 문제 몇가지를 제외하고는 lvalue 정
의의 의도 자체는 C90 과 C99 에 차이가 없습니다. (그러한 미묘한 문제들
을 제가 리뷰하고 있는 책인 C99 Analysis 에 넣을 예정입니다 - 영국분에
의해 쓰여지고 있는 이 책은 C99 표준의 한문장 한문장에 모두 주석을 달아
놓은 노가다성 책입니다 --; 제 예상은 책은 총 1000 쪽 정도가 되지 않을
까 생각되는군요)

이렇게 array type 을 lvalue 로 정의함으로써 lvalue 를 피연산자로 요구
할 수 있는 많은 부분에 array type 의 피연산자를 문제없이 제공할 수 있
습니다. 반복해서 말씀드리지만, 이는 표준의 해석문제입니다. 배열을 포인
터 상수로 이해하나, lvalue 로 이해하나 올바른 프로그래밍 습관을 익히고
계시다면 실제적인 프로그래밍에서 이 둘의 개념적 충돌을 만날 가능성은
거의 없습니다. 다만 C 의 system 자체에 대한 이해에서는 분명 많은 차이
를 가져오게 됩니다. 어떠한 해석들을 통해서 그러한 행동이 가능한가를 아
는 것과, 그냥 그렇게 사용하는 것을 보아왔고 사용하니 문제가 없어서 쓰
는 것과는 차이가 있다고 생각합니다. 다소 (극단적인?) 예를 들면, 한 PC
통신 게시판에서 있었던 논의중에, 배열명이 포인터 상수라고 생각했던 분
의 답변은 아래와 같았습니다. 이러한 배열에 대한 오해가 아래와 같은 잘
못된 프로그래밍 행동으로 나타날 수도 있습니다.

"char buffer[255]; 에서 buffer는 '포인터 상수' 입니다.
상수에다가 &를 붙여봐야 효과가 없습니다.
그래서 scanf()에서 buffer나 &buffer나 같은 결과가 나오는 것이죠.."

& 연산자는 피연산자로 lvalue 를 요구하고 있고, 피연산자로 lvalue 가 주
어졌을 때의 정의된 행동에 의해 수식내에서 &buffer 는 buffer 와 완전히
다른 type 을 갖게 됩니다.

>>...storage unit 라는 용어는 구조체/공용체에서 비트필
>>드가 존재하는 addressable storage unit 로 사용되는 용어입니다. 만약 표
>>준을 올바르게 기술하고 있다고 자부하는 책에서 byte 를 의미하는 것으로
>>storage unit 을 사용하고 있다면 조금 문제가 있는 부분이 아닌가...
>
>H&S4 162page. 문제가 있군요.
>

H&S4 는 표준을 전체적으로 잘 다루고 있는 책이지만, 많은 부분에 사소한
문제점들이 있습니다. 특히나 conversion 을 다루는 부분은 다른 책에서 찾
아보기 힘든 unary conversion, binary conversion 같은 다소 다른 개념을
도입해 설명하고 있습니다. 이는 계속해서 C 를 깊이 공부해 나갈 때 잠재
적으로 사소한 문제를 가지고 있을 수 있는 부분입니다. 사실, C 를 기술함
에 있어서 정확성은 K&R2 RM 이 더 낫다고 생각합니다.

C 표준을 올바르게 반영하여 책을 쓴다는 것은 매우 어려운 일입니다. C90
표준화 작업에서 주요 직책을 맡았던 P.J.Plauger 라는 유명한 분이 쓴 책
도 한 페이지 걸러 하나씩 틀린 부분을 만날 수 있습니다. 그렇다고 그러한
모든 책의 가치를 무효하다고 말씀드리는 것은 아닙니다. 다만, 그러한 책
에서 기술적인 내용이 인용될 때는 (표준을 반영했다는) 책의 기술만을 믿
고 표준이라는 근거를 사용하는 것은 오해를 일으킬 수 있다는 말씀을 드리
고 싶은 것입니다. P.J.Plauger 라는 분의 책에 다음과 같은 말이 있습니다.
(물론, 원래는 영어로 써 있지만, 시간 관계상 제 기억을 재구성해 한글로
적어드립니다)

"C 표준과 내 책의 내용이 충돌하면, 표준을 믿어라. 나는 틀릴 수 있다."

이상 nit-picky (csc 의 어떤 분께 얻은 별명입니다 --;) 전웅 이었습니다.


--
Jun Woong (myco...@hanmail.net)
Dept. of Physics, Univ. of Seoul
Cell: +82 16 467 6247
Web : http://c-expert.uos.ac.kr

myco...@hanmail.net

unread,
Jul 25, 2001, 7:36:16 AM7/25/01
to
>제가 가지고 있는 문서는 draft이긴 하지만 최종 표준과 거의 차이가
>없을 것이다라는 점을 먼저 말씀 드리겠고요
>

다른 글에서 말씀드렸듯이, draft (아마도 많이 배포된 N869 를 가지고 계
시리라 믿습니다) 와 C99 (final standard) 는 많은 유효한 차이를 가지고
있습니다. N869 를 최종 표준과 동일시 해서는 C 의 많은 부분에 대해 오해
를 하실 수 있습니다.

>6.7.5.1 Pointer declarators [#3]을 보시면
>int *const constant_ptr; 을 constant pointer이라 지칭하고 있습니다.
>
>더 할 말 없으시겠죠?

C99 에서 p.155 의 6.7.5.1#3 을 완전히 인용하면 다음과 같습니다.
(아마도 C9X 와 C99 는 page 번호가 다를 겁니다)

EXAMPLE

The following pair of declarations demonstrates the difference between
a "variable pointer to a constant value" and a "constant pointer to a
variable value".

const int *ptr_to_constant;
int *const constant_ptr;

The contents of any object pointed to by ptr_to_constant shall not be
modified through that pointer, [...]

일단, 드리고 싶은 말씀은 이 부분은 const 로 한정된 pointer type 에 대
한 설명에서 나온 "constant pointer" 라는 용어라는 점입니다. 따라서, 제
가 이야기하고 있는 배열을 "constant pointer" 혹은 "포인터 상수" 라고
설명하는 것과는 거리가 있습니다.

그리고 "EXAMPLE" 이라고 명시되어 있는 것을 보실 수 있을 겁니다. 앞에서
설명드렸듯이 Example 은 C 표준의 informative part 입니다. 따라서 표준
의 normative text 가 아닙니다.

이 외에도 C99 에는 (위를 포함해) 총 3번의 constant pointer 라는 용어가
나옵니다. 모두 "const 로 한정된 pointer type 을 설명"하는 "informative
part" 입니다.

Example 이나 Footnote 등이 informative part 라는 사실은 (건너뛰기 쉬운
부분이지만) C 표준에서도 명확히 밝히고 있으며, ISO 표준의 상위에 해당
하는 ISO/IEC Directive - part 3 (참고로, 올해 7월에 개정되어 part 2 에
해당하는 부분입니다) 에 의해서도 명시되고 있는 바입니다.

오해가 풀렸으리라 생각합니다.

표준이 종교 경전처럼 쓰여진 것은 아니지만, 해석 자체는 종교 경전 수준
에 해당할 정도로 어렵습니다. 표준이 튜토리얼로서 쓰여진 것은 아니지만
이 부분은 참 안타까운 부분입니다. 너무 많은 풀기 어려운 비밀을 담고 있
는 셈이지요.


--
Jun Woong (myco...@hanmail.net)
Dept. of Physics, Univ. of Seoul
Cell: +82 16 467 6247
Web : http://c-expert.uos.ac.kr

lhc_...@yahoo.co.kr

unread,
Jul 25, 2001, 7:51:34 AM7/25/01
to
constant pointer라는 것이 없다는 님의 말씀이 틀렸다는 것을
지적했을 뿐입니다. 그리고 그것이 informative part에 나오던
부록에 나오던 표준에서 그 의미를 명시하고 있는 용어입니다.
그러니 "엄밀한 의미에서 표준에 나오지 않는다"는 말씀또한
틀린것입니다.

결론은 constant pointer라는 용어는 공식적으로 C에 존재하는
용어 입니다.

korea

unread,
Jul 25, 2001, 8:38:57 AM7/25/01
to
[..]
>...또 원하지 않는 상황이 전개될까 걱정되는군요...

기우군요.

modifiable lvalue에 대해서 깊이있는 설명 잘 읽었습니다.

C9X 인용

6.5.2.1 Array subscripting
[..]
Semantics
[..]
The definition of the subscript operator [] is that E1[E2] is identical to
(*((E1)+(E2))). Because of the conversion rules that apply to the binary +
operator, if E1 is an array object (equivalently, a pointer to the initial
element of an array object) and E2 is an integer, E1[E2] designates the E2-th
element of E1 (counting from zero).
[..]
When used in the expression x[i][j], that array is in turn converted to a
pointer to the first of the ints, so x[i][j] yields an int.

처음 저의 답변으로 돌아가

>배열은 expression에 사용이 될 경우 constant pointer로 conversion이 됩니다(sizeof는 제외).

는 잘못된 *설명*입니까(constant pointer가 배열이라고 하지 않았음에 유의해 주시기
바랍니다.)?

[..]


"char buffer[255]; 에서 buffer는 '포인터 상수' 입니다.

위의 예로 드신 것과는 분명한 차이가 있습니다.

>배열은 expression에 사용이 될 경우 pointer로 conversion이 됩니다(sizeof는 제외).

는 어떤가요?

마지막으로 한 가지만 더, 위 표준문서에서 constant라는 한정자를 pointer앞에
붙이지 않은 것은 무슨 이유에선가요?


myco...@hanmail.net

unread,
Jul 25, 2001, 10:59:57 AM7/25/01
to
>constant pointer라는 것이 없다는 님의 말씀이 틀렸다는 것을
>지적했을 뿐입니다. 그리고 그것이 informative part에 나오던
>부록에 나오던 표준에서 그 의미를 명시하고 있는 용어입니다.

흠... 이렇게 사소한 문제로 괜히 또 서로 감정 상해가며 논의가 길어지기
는 싫습니다. 하지만, 제가 느끼기에 님은 지금 다소 억지를 부리고 계십니
다. 일단 님의 주장이 완전히 틀린 것은 아닙니다. C 표준을 machine-
readable form 으로 만들어 놓고 (실제로 그러한 형태로 판매되고 있지만),
"constant pointer" 을 검색하면, 3건을 찾을 수 있습니다. 그 말씀은 맞는
말씀입니다.

하지만, 님은 표준을 읽고는 계시지만, 이해하고 계시지는 못합니다. 예를
들어 보겠습니다. "C 표준은 rvalue 를 정의하고 있습니까" 라는 질문은 어
떻습니까? rvalue 라는 용어는 C 표준의 footnote 에서 설명되고 있습니다.
하지만, 그 footnote 는 표준의 normative part 가 아니기 때문에 위의 질
문에 대한 대답은 "No" 입니다.

극단적으로 설명드리면 이렇습니다. 제가 만약 C 표준에서 강제력을 갖지
못하는 informative part 를 모두 제거한 다음에 그것이 "C 표준" 이라며
다른 사람들에게 배포하거나 (물론, 저작권 문제를 무시한다면) 한다면 어
떻습니까? (실제로 일부 국가의 National Body 는 그렇게 했었습니다) 제
행동은 C 표준의 내용에 대한 해석을 변경할 수 있는 것이기에 ISO 에서
보았을 때 잘못된 행동일까요? 제가 만약 그렇게 한다면 이 문제의 씨앗이
되는 "constant pointer" 라는 용어는 그 문서에 포함되지 않습니다. 제가
그렇게 잘라낸 문서도 ISO 에 의해 국제 표준으로서의 강제력을 그대로 갖
는 "표준" 입니다.

우리가 "C 표준" 이라고 이야기한다면 이는 표준의 normative text 를 가르
키는 것입니다(!).

C 표준의 Example 이나 Footnote 에 틀린 내용이 나와 있다 하더라도 "C 표
준이 틀렸다" 라고 단언할 수는 없다는 뜻입니다. 즉, C 표준 자체는 강제
력을 갖지 않는 informative part 를 모두 무시해도 그 자체로서 틀림이 없
는 무결성을 갖춰야 하는 것입니다. (물론 Example 이나 Footnote 도 표준
의 actual text 와 일관된 내용을 담아야 합니다 - 표준은 Footnote 같은
Informative part 의 역할에 대해서 설명하고 있습니다)

아래는 제가 오래 전에 표준의 footnote 를 인용하며, 표준의 해석을 요청
하는 질문과 그에 대해 C 표준화 영국 패널인 Clive Feather 씨가 답변해
주신 것입니다 (이 문제는 몇달전에 이미 이해했는데, Clive 씨가 무슨 마
음에서인지 - 심심하신가? - 최근에 답변을 포스팅하셨습니다). 유권해석은
아니지만, 틀린 해석도 절대 아닙니다.

[Old post]

In article <zFuV5.7$_n....@news.hananet.net>, Jun Woong
<myco...@hanmail.net> writes
>[1] interchangeability
>
>Footnote 16 of C89 on p.23 (Footnote 28 of C99 on p.36):
>"The same representation and alignment requirements are meant to
> imply interchangeability as arguments to functions, return values
> from functions, and members of unions."

This is not normative, and in general such interchangeability is not
required by the Standard (even though it normally works) except in
specific cases.

위의 인용된 Footnote 에서 이야기하고 있는 바는 특정 type 이 같은 표현,
같은 정렬제한을 갖는 것은 함수인자, 반환값, 공용체 멤버로서의 상호 교
환성을 보장하도록 의도되었다는 내용입니다. 제가 묻는 바는,

Can it make something undefined (or implementation-defined)
well-defined, e.g., accessing a member of union other than
the member in which a value is stored? (I surmise NO.)

"그러한 행동이 표준의 normative part 에 의해 정의되지 않은 것이라 해도
이 footnote 에 의해 정의된 행동을 갖느냐"는 것이었습니다. 이에 대해
Clive Feather 씨의 답변은 "그 부분은 normative 가 아니기에 일반적으로
그러한 상호교환성이 표준에 의해 요구되지 않는다" 는 것입니다 (실제적인
상황에서는 대개 작동하겠지만 말입니다). ("specific case" 는 표준의
normative part 에서 정의하고 있는 몇가지 예외를 가르키는 것입니다)

결론적으로 저 Footnote 는 그냥 무시해도 표준을 이해하는데 아무런 오해
가 없다는 뜻입니다. Example 도 마찬가지 입니다. Example 에서는
Footnote 보다 더 자주 특정 implementation 을 가정하고 정의합니다. 그러
한 Example 이 normative part 라면 문제가 심각해질 수 있습니다.

>그러니 "엄밀한 의미에서 표준에 나오지 않는다"는 말씀또한
>틀린것입니다.
>

따라서 그렇지 않습니다. "표준의 어떠한 부분에도 언급되지 않는다" 는 틀
린 말입니다. 하지만, "엄밀한 의미에서 표준에 나오지 않는다" 라는 표현
은 옳다고 봐야 합니다. 원하신다면 이 문제를 comp.std.c 로 옮겨 드리겠
습니다.

>결론은 constant pointer라는 용어는 공식적으로 C에 존재하는
>용어 입니다.

constant pointer 라는 용어가 C 표준의 informative part 에서 언급되었다
는 사실은 인정하며, 이 논의의 시작부터 알고 있던 바입니다. 하지만,
constant pointer 라는 용어가 "공식적"으로 "C 표준" 에 존재하는 용어라
는 주장은 옳다고 보기 힘듭니다.

사실 표준의 Normative part 와 Informative part 에 대한 논의라면 지금의
논의가 충분히 가치가 있겠지만, constant pointer 에 대한 논의라면 이쪽
으로 논의가 흐를 이유가 없습니다. 원래의 문제는, 배열의 설명 방법으로
서의 constant pointer 에 대한 내용이고, 표준의 informative part 에 언
급되는 constant pointer 는 그와 아무런 관련이 없기 때문입니다.

결론적으로,

Does the term "constant pointer" exist in the Standard officially?
(님의 위의 문장을 의문형으로 그대로 옮긴 것입니다)

에 대한 제 대답은,

"No, it occurs only in the informative part."

입니다. 님도 제가 말씀드리는 바를, 저도 님이 말씀하시는 바를 이해하고
있다고 믿습니다. 표준에 (informative, normative 를 모두 통틀어) 그러한
용어가 나온다는 사실에는 동의합니다. 하지만, 그러한 용어를 표준의 강제
성을 가지고 명시된다는 사실에는 동의할 수 없습니다. 그러한 의미에서
constant pointer 라는 용어는 표준에서 중요성 (significance) 을 갖지 않
습니다.

그럼...


--
Jun Woong (myco...@hanmail.net)
Dept. of Physics, Univ. of Seoul
Cell: +82 16 467 6247
Web : http://c-expert.uos.ac.kr

myco...@hanmail.net

unread,
Jul 25, 2001, 11:21:14 AM7/25/01
to
In article &lt;A5z77.6266$ar1....@www.newsranger.com>, korea says...

>
>[..]
>>...또 원하지 않는 상황이 전개될까 걱정되는군요...
>
>기우군요.
>
>modifiable lvalue에 대해서 깊이있는 설명 잘 읽었습니다.
>
>C9X 인용
>
>6.5.2.1 Array subscripting
>[..]
>Semantics
>[..]
>The definition of the subscript operator [] is that E1[E2] is identical to
>(*((E1)+(E2))). Because of the conversion rules that apply to the binary +
>operator, if E1 is an array object (equivalently, a pointer to the initial
>element of an array object) and E2 is an integer, E1[E2] designates the E2-th
>element of E1 (counting from zero).
>[..]
>When used in the expression x[i][j], that array is in turn converted to a
>pointer to the first of the ints, so x[i][j] yields an int.
>
>처음 저의 답변으로 돌아가
>
>>배열은 expression에 사용이 될 경우 constant pointer로 conversion이 됩니다(sizeof는 제외).
>
>는 잘못된 *설명*입니까(constant pointer가 배열이라고 하지 않았음에 유의해 주시기
>바랍니다.)?

* 이 글은 표준에 대한 매우 고리타분한(?) 해석과 개인적인 견해를 담고
있는 글입니다. 아래 제 실수에 대해 정정한 부분을 제외하고는 표준에
관심없거나 부정적인 감정을 가지고 계신 분들은 이 글을 끝까지 읽지
않으셔도 좋습니다.


일단, 제 설명에 잘못된 부분이 있어서 정정하고 시작하겠습니다.

"이러한 해석을 따르면 배열도 당연히 lvalue 가 되며, modifiable lvalue
라는 개념을 도입해, 대입 연산자의 좌측에 오는 것을 막는 것입니다."

이 부분은 틀린 설명입니다. 사과드립니다. 배열명이 대입 연산자의 좌측
피연산자로 올 수 없는 이유는 "modifiable lvalue 가 아니기 때문이 아니
라 아예 lvalue 가 아니기 때문" 입니다. (제 실수때문에 다른 분들이 혼동
될 수도 있는데, 아래에서 계속 설명하겠습니다 - 지금 식은땀 흘리고 있습
니다 ^^; - 1년 전에 공부했던 부분이라 표준을 제대로 뒤져보지 않고 적은
답변이었습니다. 진심으로 사과드립니다)
----------------------------------------------------------------------

일단 님께서 적어주신 *설명* 자체는 잘못된 설명이라고 말씀드리기는 어렵
습니다. 또한, 배열이 pointer constant 라고 설명해도 잘못된 *설명* 이라
고 말씀드리기는 어렵습니다. 그렇다고 정확한 설명이라고 말씀드리기도 제
입장에서는 어렵습니다. 간단히 말씀드리면 pointer constant 와 constant
pointer 의 의미가 명확하지 않기 때문입니다. 구체적으로 제가 (개인적으
로) 그러한 설명을 경계하는 이유는 다음과 같습니다. (여기서부터는 상당
히 개인적인 견해입니다)

pointer constant 와 constant pointer 가 의미하는 바는 다소 다릅니다.
한국말로 번역을 하자면, "포인터 상수" 와 "상수 포인터" 정도가 되겠지요.
C 를 배우는 많은 초보분들은 이 둘 사이에 미묘한 차이를 잘 구분하지 못
합니다 (배열과 포인터라는 큰 주제에 신경이 곤두서 있겠지요). *정확히
정의되어 있지 않으므로*, 제 나름대로 일반적인 의미를 부여하자면,

pointer constant 는 상수는 상수인데, 그 type 이 pointer 인 경우일 겁니
다. 즉, 본질적으로는 lvalue 가 아닌 rvalue (value) 겠지요. (동일하지는
않지만 이와 유사한 개념이 null pointer constant 로 쓰입니다)

constant pointer 는 포인터이기는 한데, 그 값이 변하지 않는 포인터로 볼
수 있습니다. 본질적으로는 lvalue 입니다. (int * const 가 이에 해당한다
고 볼 수 있습니다 - 지금 다른 편에서 진행중인 논의에서 인용되었듯이 표
준의 example 에서 찾아볼 수 있습니다)

정도가 되리라 생각합니다. (개인적인 의미부여이므로, 이의가 있을 수도
있습니다. 또한 표준에서 정의하고 있는 용어들이 절대 아닙니다)

문제는 *배열 자체가 lvalue 라는 사실*은 틀림이 없다는 것입니다. 배열
은 lvalue 인데, 배열형의 수식이 대입 연산자의 좌변에 오면, 포인터로 변
환되면서 더이상 lvalue 가 아닙니다 (C99 6.3.2.1#3 - 제가 지난 번 답변
을 쓸 때 깜빡한 부분입니다). 그렇다면 (문제가 되는 용어들에 대한 제 정
의를 적용한다면) pointer constant 라는 말이 더 적합한 설명이 될 수 있
습니다. 하지만 "배열은 대부분의 문맥에서 pointer constant 로 변환된다"
라는 설명은 배열 자체가 lvalue 라는 사실을 흐리게 만들며, 실제로 C 가
가지고 있는 lvalue 로서의 배열의 이미지를 잘못 전달할 수 있습니다. 이
는 제 상상에서 나온 결론이 아니라 실제 C 강의를 해 본 결과 작은 실험에
서 얻은 결론입니다. 호기심에 위와 같은 설명이 배열의 이미지를 얼마나
잘 전달할 수 있는지 알아보고자 (포인터의 개념을 알고 있는) 강의를 듣는
분들께 저 설명에 대한 그림을 그려 주실 것을 부탁드렸고, 거의 모든 분들
이 잘못된 그림 (메모리 어딘가에 상수가 있고, 그 상수가 배열 요소들의
시작번지를 가르키는 그림) 을 그려주셨습니다. 물론, C 의 실제적인 구현
은 그 그림과 같을 수 있습니다 (이를 가지고, 어떤분은 청출어람이라고 놀
린 적이 있죠 ^^). 하지만, C 의 추상적인 언어 정의에 따르면 배열 요소가
storage 에 존재하고 그 전체가 어떠한 배열명을 갖는 그림이 올바른 그림
입니다 (그림을 그릴 수 있으면 좋을텐데 말로 설명하려니 전달이 올바르게
될지 걱정입니다 - clc FAQs 책을 보시면 제가 설명드린 그림이 잘 그려져
있습니다). 즉 위와 같은 사실은 C 를 공부하는 사람들로 하여금 "배열은
pointer constant 이다" 라는 쉬운 생각을 심어주기에 충분하다는 뜻입니다.
이는 pointer constant 와 constant pointer 의 의미와 구분이 명확하지 않
은 상태에서 어느 용어를 사용해도 결국 같은 왜곡된 이미지를 만들어 낼
수 있다는 것이 제 생각입니다. 오히려 constant pointer 라는 설명과 배열
이 lvalue 라는 사실의 강조는 더 잘못된 이미지를 생성할 수도 있다고 판
단됩니다.

어디까지나 개인적인 의견이므로, 어느쪽이든 위의 두 설명은 "배열은 포인
터 *상수*이다" 라는 극단적인 설명이 아니고서는 틀렸다고 주장하지는 못
하겠습니다. 하지만, 배열이 lvalue 라는 중요한 사실 (이 사실로 인해 기
존에 잘못 알고있던 C 에서의 lvalue 개념을 깨뜨릴 수 있습니다) 만큼은
배열-포인터 변환 설명에 빠져서는 안된다고 생각합니다.

그나저나 이번 논의를 통해 제가 최근 몇달동안 배열와 대입 연산자의 관계
를 잘못 알고 있었다는 사실을 깨달았습니다. 방금 검색해보니 매우 오래전
(제가 그러한 내용을 공부할 당시) 에 게시판에 올린 글에는 올바르게 설명
되어 있는데 최근의 몇몇 글에서 잘못된 설명을 해왔군요. 지금부터 포스팅
했던 모든 글을 검색해 정정하는 글을 작성해야 겠습니다. 이 점에 대해 감
사드립니다.

>
>[..]
>"char buffer[255]; 에서 buffer는 '포인터 상수' 입니다.
>
>위의 예로 드신 것과는 분명한 차이가 있습니다.
>
>>배열은 expression에 사용이 될 경우 pointer로 conversion이 됩니다(sizeof는 제외).
>
>는 어떤가요?

완벽하게 옳은 설명입니다. 물론, 배열이 lvalue 라는 사실과 pointer 로
변환되면 더이상 lvalue 가 아니라는 설명이 함께 있다면 금상첨화라 생각
합니다.

>
>마지막으로 한 가지만 더, 위 표준문서에서 constant라는 한정자를 pointer앞에
>붙이지 않은 것은 무슨 이유에선가요?
>

그 이유는, 일단 constant pointer, pointer constant 를 정의하지 않았기
때문입니다. 이미 다른 부분에서 더이상 lvalue 가 아니라고 이야기했기 때
문에 굳이 그러한 다른 개념을 정의해가며 배열-포인터 변환을 설명할 필요
가 없습니다. 그냥 type 자체가 pointer 로 변환된다는 것만으로도 다른 부
분과 연계된 해석을 통해 오히려 더 정확한 기술을 할 수 있기 때문입니다.
C 표준은 경제적인 이유로 이러한 방식으로 많은 것들을 은연중에 기술/정
의하고 있습니다. 이러한 부분도 표준 해석을 까다롭게 만드는 이유중 하나
입니다.

용어와 관련되어 에피소드 하나를 말씀드리면, C90 에서는 integer type 과
integral type 이라는 2개의 용어를 사용했습니다. 둘은 결국 동일한 "정수
형" 을 가르키는 것이었는데, 후에 둘 중 하나만 정의가 되어 있다는 지적
이 들어왔습니다. 그래서 C99 에서는 (C9X 를 검색해 보시면 아시겠지만)
integer type 이라는 용어만을 사용하고 있습니다. 동일한 이야기는
variable 과 object 라는 용어에도 적용됩니다. 둘은 동일한 것을 가르키는
용어였으며, C99 에서는 object 라는 용어만을 사용합니다. 따라서 최소한
의 용어를 도입하는 것이 표준의 기술을 분명하게 만들어 줄 수 있습니다.


긴 설명 적었지만, 제 실수에 허둥지둥 대는 바람에 얼마나 도움이 될지는
모르겠습니다.

myco...@hanmail.net

unread,
Jul 25, 2001, 11:29:30 AM7/25/01
to
[...]

>일단 님께서 적어주신 *설명* 자체는 잘못된 설명이라고 말씀드리기는 어렵
>습니다. 또한, 배열이 pointer constant 라고 설명해도 잘못된 *설명* 이라
>고 말씀드리기는 어렵습니다. [...]

"배열이 pointer constant 라고 설명해도" 를 "배열이 대부분의 문맥에서
pointer constant 로 변환되다고 설명해도" 로 정정합니다. 죄송합니다.

myco...@hanmail.net

unread,
Jul 25, 2001, 11:38:10 AM7/25/01
to
[...]

>
>H&S4, ABC, K&R2 모두 표준이 아닙니다. 우리가 현재 "표준" 에 대해서 이
>야기하고 있다면 그러한 모호한 표현을 사용하는 것은 바람직하지 않습니
>다. constant pointer 라는 의미는 마치 배열이 rvalue 인 것같은 이미지를
>내포하고 있습니다. 하지만, 엄연히 배열도 lvalue 입니다. 다만,
>modifiable lvalue 가 아니기 때문에 대입 연산의 좌측 피연산자로 올 수
>없는 것 뿐입니다.
>
>우리 대부분은 (저도 초기에는) lvalue 는 대입 연산에서 좌측 (left) 피연
>산자로 올 수 있는 수식이라고 알고 있습니다. 실제로 lvalue 라는 용어에
>서 l (ell) 은 left 에서 따 온 것입니다. 하지만, C 표준에서는 이를 그렇
>게 정의하지 않고 locator value 라고 정의하고 있습니다. (locator value
>가 공식적인 용어는 아닙니다. Informative part 에서 사용된 용어입니다)
>즉, (C90/C99 에서 발생하는 차이를 무시하고 대강 이야기하자면) storage
>를 지정하는 모든 수식은 lvalue 입니다. 이러한 해석을 따르면 배열도 당
>연히 lvalue 가 되며, modifiable lvalue 라는 개념을 도입해, 대입 연산자
>의 좌측에 오는 것을 막는 것입니다.

답변 정정합니다. 배열형 수식이 대입 연산자의 좌측 피연산자로 사용될 수
없는 이유는 modifiable lvalue 이기 때문이 아니라, lvalue 이던 배열이
제가 말씀드렸던 몇몇 문맥을 제외하고는 포인터로 변환되며 더이상 lvalue
가 아니기 때문입니다. 오래전에 공부했던 내용이라 실수했습니다. 진심으
로 사과드립니다.

myco...@hanmail.net

unread,
Jul 25, 2001, 11:36:20 AM7/25/01
to
>
>constant pointer 라는 것은 없습니다. [hclc 게시판] 의 "Re: 포인터와 배
>열에 대한 개념차이" 라는 글을 보시기 바랍니다. 국내의 많은 책과 사람들
>이 "포인터 상수", "constant pointer" 등의 용어를 사용하고 있지만, 올바
>른 개념이 아닙니다. 위 대입식에서 배열에 "noname" 을 가르키는 포인터를
>대입할 수 없는 이유는 배열이 lvalue 이기는 하지만, modifiable lvalue
>가 아니기 때문입니다.
>

답변 정정합니다. 배열형 수식이 대입 연산자의 좌측 피연산자로 사용될 수


없는 이유는 modifiable lvalue 이기 때문이 아니라, lvalue 이던 배열이
제가 말씀드렸던 몇몇 문맥을 제외하고는 포인터로 변환되며 더이상 lvalue
가 아니기 때문입니다. 오래전에 공부했던 내용이라 실수했습니다. 진심으
로 사과드립니다.

myco...@hanmail.net

unread,
Jul 25, 2001, 11:41:16 AM7/25/01
to
[...]

>
>그리고, array type 은 님이 인용해 주신 부분에 의해, modifiable lvalue
>에서는 배제됩니다. (complete 든 아니든 array type 을 정의에서 배제하고
>있지요) 그리고 assignment operator 의 constraints 에서 보실 수 있듯이
>좌변 피연산자로는 modifiable lvalue 가 와야 합니다. 따라서, modifiable
>lvalue 가 아닌 array type 수식은 좌변에 올 수가 없습니다.

다른 글에서 정정했듯이 배열형 수식이 포인터형으로 변환되면서 더이상
lvalue 가 아니기 때문입니다. lvalue 가 아니므로 그것의 부분 집합인
modifiable lvalue 는 더욱 될 수 없겠죠. 잘못된 설명에 사과드립니다.

lhc_...@yahoo.co.kr

unread,
Jul 25, 2001, 12:27:17 PM7/25/01
to
더이상 물고 늘어질 생각은 없지만
물론 할말이 없어어 늘어 지지 않는다고 생각하시면
엄청난 오산을 하시고 계시는 것이고요

단 말하고 싶은것은 영어 쓰는 애들 말이 한글 쓰는
애들 말보다 신빙성 있다는 사고는 버리시기 바라고
(사대주의라고 하던가)
남을 몰아 부치기 전에 그 방법을 자신한테 먼저 적용하시는
여유도 가지시기를 충고 드립니다.

계속 이곳에서 뵐수있기를 기대하면서 이만
휘리릭~~~

lhc_...@yahoo.co.kr

unread,
Jul 25, 2001, 12:37:44 PM7/25/01
to
그리고 또하나 비건설적인 소모적인 토론 유도는
자제해 주심이...

정말로 휘리릭~~~

myco...@hanmail.net

unread,
Jul 25, 2001, 1:06:47 PM7/25/01
to
[비기술적인 글의 개수를 줄이기 위해 2개의 글에 한번에 답합니다]

결국 또 우려하던 글이 포스팅되었군요. 제가 이 그룹에 글을 포스팅한 것
부터가 또 잘못이었다는 생각이 듭니다.

예전에 저로 인해 다소 시끄러운 일이 있었을 때 표준의 중요성을 그렇게
역설하시던 ("개인적인 감정 문제에 표준을 끌여들이지 말라" 고 표현하셨
었죠?) 분도 결국 감정에 치우친 글로 쓰레드를 보기좋게 마무리 하시는군
요. 예, 제가 잘못했습니다. 저는 글만 포스팅하면 그룹을 이런 분위기로
만드는 사람인가 봅니다 (--;).

>더이상 물고 늘어질 생각은 없지만
>물론 할말이 없어어 늘어 지지 않는다고 생각하시면
>엄청난 오산을 하시고 계시는 것이고요

기술적인 내용이라면 더 물고 늘어지셔도 좋습니다 (꼭 이곳이 아니어도 좋
습니다 - 개인메일이나 제 홈페이지 게시판등). 이해할 수 없는 부분이 있
다면, 저는 표준의 모든 부분 (normative 든 아니든) 을 통틀어 constant
pointer 라는 용어가 사용되었다는 점을 이전의 답변, 그리고 다른 내용의
논의가 진행중이었던 다른 답변에서도 인정했습니다. 다만, 그것의 명확한
의미에 대한 표준으로서의 강제력은 informative part 이기 때문에 전혀 별
개의 문제라는 주장을 한 것뿐입니다. 님께서 무슨 말씀을 하고 싶으신지
알고 있으며, 님도 제 주장이 무엇인지 아시리라 믿었습니다. 님의 주장이
그만큼 기술적으로 정당한 것이라면 왜 똥 피하듯 감정적인 글 2개를 포스
팅 하시며 더이상의 논의를 피하시는 것인지 궁금하군요.

>
>단 말하고 싶은것은 영어 쓰는 애들 말이 한글 쓰는
>애들 말보다 신빙성 있다는 사고는 버리시기 바라고
>(사대주의라고 하던가)

제가 comp.std.c 를 언급한 이유는 그곳에 계신 분들이, (저를 포함해) 이
곳에 계신 대부분의 분들보다 표준에 대해서 올바른 해석을 할 수 있기 때
문입니다 (최소한 올바른 해석을 내릴 가능성은 더 크며, 몇몇 분은 실제
표준화 작업에 참여하고 있는 분들입니다). 단순히 그들이 경제적으로나 정
치적으로 선진국 국민이고, 영어를 쓴다는 이유만으로 동경하는 것이 아닙
니다. 아실만한 분이 왜 이런 식의 글을 쓰셨는지 이해하기 힘듭니다.

>남을 몰아 부치기 전에 그 방법을 자신한테 먼저 적용하시는
>여유도 가지시기를 충고 드립니다.

저는 님을 몰아붙이지 않았습니다. 자신이 잘못 알고 있던 부분을 지적받으
면 상대방이 자신을 몰아 붙여가며 공격하는 것이라고 생각하는 것은 조금
잘못되었다고 생각하지 않으십니까? 아시겠지만 (예전 같으면 안 그랬겠지
만) 저는 님이 의도하는 바를 이해하기위해 노력하고 있음을 표현하기 위해
애썼으며 (얼마나 드러났는지는 모르겠습니다만), 또 제 의견을 인정해 주
시기를 부탁드리고 있는 것입니다.

----------------------------------------------------------------------


>그리고 또하나 비건설적인 소모적인 토론 유도는
>자제해 주심이...
>

제가 비건설적이고 소모적인 토론을 유도했나요? (제가 유도 미사일이라도
됩니까? 썰렁~) 님께서 개인적으로 감정이 상하신다고 이런 식으로 오늘 이
루어진 토론을 비건설적이고 소모적인 토론으로 매도하시는 것은 옳지 않다
고 생각합니다. 비건설적이고 소모적으로 유도된 토론에 왜 참여하셔서 그
렇게 열을 내시고 계신지 이해하기 어렵습니다.

중요성을 역설하시던 표준도, 결국 저에 의해 논의가 이루어지고, 님의 기
분을 상하게 한다면 결국 비건설적이고 소모적인 토론이 되는 것이군요. 잘
알겠습니다. 저는 부유하고 천성이 게을러서 비건설적이고 소모적인 토론을
좋아한답니다. comp.std.c 에는 그런 토론을 좋아하는 분이 많이 계서서 저
로서는 다행스럽게 생각하고 있습니다. ^^

그럼...

p.s. 그래도 다행스럽게 이번에는 익명으로 욕먹지는 않았네요. 더 욕먹기
전에 조용히 사라져야지요.


--
Jun Woong (myco...@hanmail.net)
Dept. of Physics, Univ. of Seoul
Cell: +82 16 467 6247
Web : http://c-expert.uos.ac.kr

sha...@filter.aipiri.yonsei.ac.kr

unread,
Jul 25, 2001, 2:54:46 PM7/25/01
to

술을 많이 마신터라 무슨 이야기를 했는지 현재 이해가 전혀 가지 않습니다만, 이런 생각은 드는군요.

'아쉽다.'

사실, 본 뉴스그룹에 posting을 하기 시작했을 때, 님의 reply에 많은 기대를 하고 있었습니다만, 더 이상 이 그룹에 posting을 하지 않겠다라는 말속에 이 그룹을 무시하는 의미가 포함된 것은 아닌지 모르겠군요(아니길 바랍니다). 약 1-2년전엔가 csc 그룹에 제 글이 엄청난 re:를 달면서 생명력을 유지하던 글이 있었는데 기억하실런지 모르겠군요(귀찮아서 그 글타레를 다 읽지 않았지만). 그 당시에 [JW]라는 글머리를 본 기억은 없습니다만... 그 글의 제목은 '어딜가면 표준문서를 찾을 수 있을까요?'라는 글이었습니다(물론 표준문서를 완벽하게 분석한 적은 없습니다. 개인적으론 시간낭비라고 생각했고).

어쨌거나 긴 글로봐서 최선을 다해 설명을 하기려고 노력해 주신 부분 감사드립니다. 개인적으로 mail보다는 board를 좋아하기때문에 개인메일을 드려 귀찮게 해드리는 일은 없을테니 되로록 board를 자주 방문하셔서 좋은 글 남겨주시기 바랍니다. 전웅님의 글에 대한 기술적인 글타레는 내일 아침에 다시 달도록하겠습니다.

오래전부터 생각해 오던 것이 '다시는','두 번 다시'라는 말은 쉽게 하는 것이 아니라는 것이었습니다.

myco...@hanmail.net

unread,
Jul 25, 2001, 8:52:22 PM7/25/01
to
>
>술을 많이 마신터라 무슨 이야기를 했는지 현재 이해가 전혀 가지 않습니
>다만, 이런 생각은 드는군요.
>

제 답변에 대해 말씀하고 계신 것이라면 술을 많이 마신 탓이 아니라 제 글
실력이 부족하기 때문인 듯 합니다.

>'아쉽다.'

술을 많이 드시기는 했나 봅니다. ^^; (요즘 음주 포스팅 단속기간 아닌가
요?)

>
>사실, 본 뉴스그룹에 posting을 하기 시작했을 때, 님의 reply에 많은 기
>대를 하고 있었습니다만, 더 이상 이 그룹에 posting을 하지 않겠다라는
>말속에 이 그룹을 무시하는 의미가 포함된 것은 아닌지 모르겠군요(아니길
>바랍니다).

절대 그렇지 않습니다. 제가 이 그룹을 csc, clc 보다 무시했다면, 이 곳에
그렇게 많은 시간을 들여가며 글을 포스팅 해오지는 않았을 겁니다. 물론,
메일에서 몇몇분은 "일방적인 봉사에 감사드린다" 고 말씀해주셨지만, 저는
제가 했던 행동들을 "일방적 봉사" 라고 생각한 적 없습니다. 또한 일방적
으로 이곳에 계신 분들을 "가르쳐준다" 라고 생각해 본 적도 없습니다. 늘
제가 사용하듯이 이 그룹에 있는 모든 글은 "질문-답변" 이 아니라 "논의"
입니다. 조금이라도 성의있는 글로 답변해 보신 분들은 아시겠지만, 답변하
는 사람도 많은 것들을 배우게 된다고 느끼고 있습니다. (책 제목이라도 알
려주기 위해 책을 한번이라도 더 꺼내보겠지요? :-)

제가 이 그룹에서 느끼는 아쉬운 점은 기술적인 내용의 논의에 감정을 쉽게
끌어들인다는 점입니다. 특히나 자신의 실수나 잘못을 지적받았을 때 (물론,
당황되고 창피할 수도 있습니다. 저 역시 마찬가지입니다. 하지만 그런 내
용을 지적받지 않고 지나간다면 후에 다시 고쳐알기는 더 어려운 일입니다.
따라서 그런 부분을 지금 바로잡을 수 있다는 사실에 대해 고맙게 생각해야
한다고 믿습니다) 지적한 사람을 마치 남의 헛점을 꼬집어 몰아세우는 공격
형 인간으로 매도하는 모습은 매우 안타깝습니다.

저는 다른 분이 말씀하신 것처럼 사대주의에 빠져 있는 것은 아니지만 (사
대주의에 빠져 있다면 이 그룹에서 한국말로 한국사람과 영어로 되어 있는
표준을 떠들지는 않을 것입니다), 다른 외국 그룹에서 느끼는 사실은 최소
한 동양권 (물론, 제가 본 경우는 고작 한국, 중국 사람뿐이라 이렇게 확대
해석하면 오류가 될지도 모르겠지만) 사람들이 객관적 사실을 토론하는 자
세가 많이 부족하다는 것입니다. 그룹에서는 천적인 것 마냥 서로 하루에도
십여차례씩 반론을 제기하다가도 개인메일로는 서로의 안부를 묻고 농담을
주고 받는 여유가 아쉽습니다. (물론 모든 사람이 다 그러한 것은 아니겠지
만 말입니다 - 이번에도 어쩌면 확대해석의 오류일지 모릅니다)

>약 1-2년전엔가 csc 그룹에 제 글이 엄청난 re:를 달면서 생명력을 유지하
>던 글이 있었는데 기억하실런지 모르겠군요(귀찮아서 그 글타레를 다 읽지
>않았지만).

글쎄요 제가 기억력이 워낙 안 좋아서; 그 당시 메일 주소를 무엇으로 하여
글을 쓰셨는지 모르겠네요.

>그 당시에 [JW]라는 글머리를 본 기억은 없습니다만...

제가 포스팅을 처음 시작한 (대부분 질문입니다만) 글에만 [JW] 라는 말머
리를 답니다. 답변을 달 때는 제목을 수정하지 않습니다. (일부 Web-based
usenet service 에서는 제목이 바뀌면 다른 쓰레드로 취급하더군요)

흠, 제가 정확히 언제부터 csc 에서 활동했는지 기억하지는 못하지만, csc
그룹이 있음을 알지도 못했을 때는 주로 clc 에 글을 포스팅하고 있었습니
다.

>그 글의 제목은 '어딜가면 표준문서를 찾을 수 있을까요?'라는 글이었습니
>다(물론 표준문서를 완벽>하게 분석한 적은 없습니다. 개인적으론 시간낭
>비라고 생각했고).
>
>어쨌거나 긴 글로봐서 최선을 다해 설명을 하기려고 노력해 주신 부분 감
>사드립니다. 개인적으로 mail보다는 board를 좋아하기때문에 개인메일을
>드려 귀찮게 해드리는 일은 없을테니 되로록 board를 자주 방문하셔서 좋
>은 글 남겨주시기 바랍니다. 전웅님의 글에 대한 기술적인 글타레는 내일
>아침에 다시 달도록하겠습니다.
>
>오래전부터 생각해 오던 것이 '다시는','두 번 다시'라는 말은 쉽게 하는
>것이 아니라는 것이었습니다.
>

이 그룹에서 여러가지 (재미있고/재미없는) 일을 겪으면서 몇몇 분들로부터
좋은 인생철학을 들었었고, 또 지금도 듣고 있습니다. 감사드립니다.

저도 님께 개인적으로(?) 부탁드리고 싶은 것이 있습니다. 글을 포스팅하실
때 가능하면 엔터를 몇번 눌러주시기 바랍니다(?). 한 문단이 너무 길어 글
을 읽거나 답변을 할 때 다소 불편합니다. (저는 web-based service 로만
usenet 을 사용하다보니, 님의 글은 문장이 길어 스크롤바를 옮겨가며 봐야
하는 불편함이 있습니다. 저말고 다른 분들도 그런 불편을 느꼈으리라 생각
합니다)

그럼...


--
Jun Woong (myco...@hanmail.net)
Dept. of Physics, Univ. of Seoul
Cell: +82 16 467 6247
Web : http://c-expert.uos.ac.kr

lhc_...@yahoo.co.kr

unread,
Jul 25, 2001, 11:49:53 PM7/25/01
to
충고까지도 욕하는 걸로 들리시니 얼마나 시달리셨길래
그런 피해망상에 빠지셨을지 저는 감히 상상이 안되네요.

지금부터 님의 흉내를 조금만 내볼까 합니다.

>결국 또 우려하던 글이 포스팅되었군요. 제가 이 그룹에 글을 포스팅한 것
>부터가 또 잘못이었다는 생각이 듭니다.

무엇을 우려하셨으며 우려하시던 바가 무슨 근거로 우려가 되시는지 설명을
부탁드리며 님이 이 그룹에 글을 포스팅하는 것 부터가 잘못이라니
같이 논할 수준이 아닌 사람들과 왜 말을했을까 후회조로 해석될 수 있겠습니다.
분명하게 말씀해 주시기 바랍니다.

>예전에 저로 인해 다소 시끄러운 일이

다소 시끄러운 정도는 어느 정도가 되어야 다소 시끄러운 것입니까?
그것은 기술적인 용어로써 부정확한 모호한 표현으로써 implementation dependent한
것입니다.

>표준의 중요성을 그렇게 역설하시던 ("개인적인 감정 문제에 표준을 끌여들이지

>말라" 고 표현하셨었죠?) 분도 결국 감정에 치우친 글로 쓰레드를 보기좋게
>마무리 하시는군요.


위에서 말했다 시피 이것은 님의 피해망상에 기인한 자의적 해석이며 직접 말한
장본인인 저는 감정을 실어서 님의 가슴에 비수를 꼽기 위한 비건설적이고
악의적인 포스팅을 의도한 것이 아닌 저의 자의적인 관점에서 님의 잘못된 점을
지적하고자 한 충고였습니다. 주제넘은 충고가 열받으셨다면 그렇다고 말씀
해주세요. 빙빙 돌려서 말씀을 하시면 표현 전달 과정에서 여러가지 해석이(오해가)
나올수 있겠습니다.

>예, 제가 잘못했습니다.

constant pointer란 것이 없다고 말씀하셨으니 잘못하신 것입니다.

>기술적인 내용이라면 더 물고 늘어지셔도 좋습니다.

사실 기술적인 내용부터 토론 방식까지 물고 늘어 지고 싶은 것은 산더미입니다.
근데 문제는 산더미라는 것입니다. 한두가지라면야 끝까지 물고 늘어지겠습니다만
님의 길다란 글에는 아주아주 수많은 버그들이 있답니다.
제가 말씀드렸던것 처럼 남을 몰아 부치는 방식으로 자신의 글을 되돌아 본다면
저의 주제넘은 딴지보다 훨씬 정교한 필터로써 죄다 찾을수 있을 것이라
확신합니다. 그리고 소포모어 단계는 지나신것 같은데 소피스트들이나 할 법한
토론 유도는 피하셔야죠.

>그것의 명확한 의미에 대한 표준으로서의 강제력은 informative part 이기
>때문에 전혀 별개의 문제라는 주장을 한 것뿐입니다.

무엇과 전혀 별개의 문제라고 말씀하시는지 부정확한 문장이 되겠습니다.
(지금 상당히 짜증이 나시리라고 생각되어 지는데 이런것들이 바로 님이
다른 분들로 부터 감정을 사는 이유중에 하나 입니다. 이것으로 님의
흉내는 마치겠으며 저의 생각을 계속 이어 나갈까 합니다.)
용어를 가지고 강제력을 따진다니 이것은 또 무슨 말인가요? 어떻게 생긴것을
어떻게 불를것이다. 표준에서는 그것이 이렇게 생긴것이다 라고 하고 있지요.
그것을 이렇게 부르던 저렇게 부르던 아니면 유식한척 표준에서 설명하는데로
부르던 뜻만 통하면 됩니다. 용어라는 것의 본질을 함 생각해 보시길 바랍니다.

>님도 제 주장이 무엇인지 아시리라 믿었습니다.

님의 주장이 뭔지는 알고 있습니다.
여기서 지적해주고 싶은 것은 실수든 잘못이든
뭐든 했다면 확실하게 인정을 하는 것이 좋다는 것이지요. 내가 실수를 하긴 했는데
엄밀하게 말하면 실수가 아냐라는 식으로 말씀을 하시는 것은 역시 주변분들로
부터 감정을 불러 일으킬만한 것이 되겠습니다.

>님의 주장이 그만큼 기술적으로 정당한 것이라면 왜 똥 피하듯 감정적인 글 2개를

>포스팅 하시며 더이상의 논의를 피하시는 것인지 궁금하군요.

제가 님의 표현대로 더이상의 논의를 피하는 것은 비건설적이고 불필요한
소모적인 토론을 피하고자 함입니다. 이점은 분명히 알아주셨으면 좋겠으며
그리고 저는 컴파일러 제작자도 아니고 중요하지도 않은 문제로 ( 물론 님에게는
중요한 문제일런지도 모르겠습니다만)
다른 할일을 제껴두고 표준문서 보는데 너무 많은 시간 투자를 하는것을
피하기 위해서 입니다. 위에서 말했던것 처럼 님이 남에게 적용하시는 필터를
자신의 글에 적용하신다면 그 누구의 지적보다 훌륭하게 자신의 버그를 찾고
지식의 완성도를 높일수 있지 않을까 싶군요.


>제가 comp.std.c 를 언급한 이유는 그곳에 계신 분들이, (저를 포함해) 이
>곳에 계신 대부분의 분들보다 표준에 대해서 올바른 해석을 할 수 있기 때

>문입니다(최소한 올바른 해석을 내릴 가능성은 더 크며, 몇몇 분은 실제


>표준화 작업에 참여하고 있는 분들입니다)

comp.std.c의 권위를 부정하고자 이런 글을 쓴것이 아니며 저역시 양키놈들이
앞서있다는 것은 인정하고 있습니다. 다만 제가 이 부분을 쓴 이유는
어떤 근거로써 그놈들의 말을 직접 인용하고 그래서 이렇다는 것은 엔지니어로써
내가 대단한 애국자는 아니지만 외국넘에 비해서 못하다는 것을
인정하는 부분이기에 자존심 차원에서 지적한 것입니다.
그 넘들이 말이 판단하는데 도움이 될 수 있을진 몰라도 기준으로써
사용되어선 안 될 것입니다.

>저는 님을 몰아붙이지 않았습니다. 자신이 잘못 알고 있던 부분을 지적받으
>면 상대방이 자신을 몰아 붙여가며 공격하는 것이라고 생각하는 것은 조금
>잘못되었다고 생각하지 않으십니까?

이 부분을 보실때 어딘가 찔림을 당하는 것 같다는 느낌은 안드십니까? ;)

>제가 비건설적이고 소모적인 토론을 유도했나요? (제가 유도 미사일이라도
>됩니까? 썰렁~)

이 부분을 이해하고 싶다면 다시 1번 라인으로 jmp 하시길 바랍니다.

>님께서 개인적으로 감정이 상하신다고 이런 식으로 오늘 이
>루어진 토론을 비건설적이고 소모적인 토론으로 매도하시는 것은 옳지 않다
>고 생각합니다.

제 개인적 감정이 상해서 이런 식으로 오늘 이루어진 토론을 비건설적이고 소모적인
토론으로 매도하는 것이아니며 실제 그렇게 매도 하지도 않았으며
님의 잘못된 부분을 지적한 것입니다.

>중요성을 역설하시던 표준도, 결국 저에 의해 논의가 이루어지고, 님의 기
>분을 상하게 한다면 결국 비건설적이고 소모적인 토론이 되는 것이군요.

중요성을 역설하시던 표준도 비건설적이고 소모적인 토론이 되는 것이군요는
illegal syntax입니다.

>저는 부유하고 천성이 게을러서 비건설적이고 소모적인 토론을
>좋아한답니다

인정하시니 다행입니다. 이렇게만 인정할 줄 안다면 문제는 없을것입니다. :))

>comp.std.c 에는 그런 토론을 좋아하는 분이 많이 계서서 저
>로서는 다행스럽게 생각하고 있습니다. ^^

국가적으로도 다행이군요. 양키놈들이 비건설적이고 소모적인 토론을 하는동안
우리나라가 발전할 수 있을테니 ;)

>그럼...

그럼...

>p.s. 그래도 다행스럽게 이번에는 익명으로 욕먹지는 않았네요. 더 욕먹기
> 전에 조용히 사라져야지요.

p.s. 욕을 먹었다면 왜 욕을 먹었는지 또 뭐라고 욕을 먹었는지 잘 생각해 보는
것이 필요하죠. 세상은 혼자 사는 것이 아니니. 남을 배타적으로 대하는것은
남이 자신을 배타적으로 대하도록 만들뿐입니다.
........................open your mind.........................

myco...@hanmail.net

unread,
Jul 26, 2001, 12:27:17 AM7/26/01
to
[...]

>
>국가적으로도 다행이군요. 양키놈들이 비건설적이고 소모적인 토론을 하는동안
>우리나라가 발전할 수 있을테니 ;)
>
>>그럼...
>
>그럼...
>
>>p.s. 그래도 다행스럽게 이번에는 익명으로 욕먹지는 않았네요. 더 욕먹기
>> 전에 조용히 사라져야지요.
>
>p.s. 욕을 먹었다면 왜 욕을 먹었는지 또 뭐라고 욕을 먹었는지 잘 생각해 보는
> 것이 필요하죠. 세상은 혼자 사는 것이 아니니. 남을 배타적으로 대하는것은
> 남이 자신을 배타적으로 대하도록 만들뿐입니다.
> ........................open your mind.........................
>

예전에 다소 시끄러운 일이 있었을 때 (글쎄요, 얼마나 시끄러워야 다소 시
끄러운 것일까요? 저는 모르겠네요 ^^), 많은 분들이 제게 좋은 충고, 격려,
비판의 말씀을 해주셨습니다. 그 분중에 한 분이 쓸데없는 말은 조용히 무
시하는 것도 자신을 지키며 살아가는 중요한 방법이 될 수 있다고 말씀해 주
셨습니다. 이젠 저도 그 분의 소중한 충고를 받아들여 행동해야겠습니다.

몇일 후, 혹은 몇년 후 님이 조금 더 생각이 커지신다면 지금 이 글에 대해
매우 부끄럽게 생각할 것입니다.

님이 아무리 그건 아니라고 소리치고 부정해도, 사실은 변하지 않습니다.
계속 소리치다 지치면 생각이 바뀌시든가, 아니면 결국 메아리만 울리는 자
신의 벽에 갇히게 될 뿐이죠.

다른 글 같았으면 님을 설득하기 위해 매 부분마다 답변을 달았겠지만, 이번
글은 그렇고 싶은 생각조차 들지 않는 글입니다. 계속해서 제게 말씀하고 싶
으신 게 있다든가, 욕을 하고 싶으시면 개인메일로 주시기 바랍니다. 더이상
다른 분들께 부끄러운 모습 보이지 않는 것이 님을 위해 좋을거라 생각됩니
다.

그럼...

lhc_...@yahoo.co.kr

unread,
Jul 26, 2001, 1:15:09 AM7/26/01
to
>쓸데없는 말은 조용히 무시하는 것도 자신을 지키며 살아가는 중요한 방법

제말이 쓸데없는 무시할 말로 들렸다니 없던감정 막 생기는 군요.
안쓸라다 그 답글 쓰면서 내가 몇십분을 거기에 소비를 했건만.. 후후.
그런식으로 남의 말을 받아 들인다면 제대로 된 소리 듣기는 힘들겁니다.


>몇일 후, 혹은 몇년 후 님이 조금 더 생각이 커지신다면 지금 이 글에 대해
>매우 부끄럽게 생각할 것입니다.

뭐가 부끄러울 까요? 할말 했을뿐인데..

>님이 아무리 그건 아니라고 소리치고 부정해도, 사실은 변하지 않습니다.
>계속 소리치다 지치면 생각이 바뀌시든가, 아니면 결국 메아리만 울리는 자신의
>벽에 갇히게 될 뿐이죠.

내가 뭘 소리쳤었더라.. 음냐.. 님의 경험담인것 같은데 저역시 그런때가
있었죠. 그렇다고 좁아 터진 울타리를 치고 외고집에 빠지진 안았답니다.

>다른 글 같았으면 님을 설득하기 위해 매 부분마다 답변을 달았겠지만, 이번
>글은 그렇고 싶은 생각조차 들지 않는 글입니다.

섭섭하군요.

>더이상 다른 분들께 부끄러운 모습 보이지 않는 것이 님을 위해 좋을거라
>생각됩니다.

진짜 부끄러움은 '척'하는 것입니다. 몰라도 아는척, 기면서 아닌척, etc
다른 분들의 판단은 다른 분들께 맡겨주시죠.

$cat result.mind
//result.mind Written by LHC for mycoboco
//all right reserved
#include "mycoboco.mind"
a = lim(mind.close());
print(%d %c %s, a, a, a);
$./result.mind
0, . "밴댕이"

bjl...@dreamwiz.com

unread,
Jul 26, 2001, 7:49:26 PM7/26/01
to

안녕하세요 '다른 사람'입니다.
무슨 일이 있었나 해서 이 쓰레드의 처음부터 주욱
읽어보았습니다만...

lhc_2001님. 유즈넷에서 토론해야 할 내용은
토론자의 인성이 아니라 기술적인 내용 아닐까요?
기술적인 면에서 주장할 것이 있으면 하세요.
그런 것이 없다면 토론을 접으시면 됩니다.

마지막에 쓰신 글을 보니 mycoboco님을 벤댕이
라고 부르고 싶으셨던 모양인데, 그렇게 해 보셔야
자기 얼굴에 똥칠하는 것 밖에 안됩니다.

다른 사람이 어떻게 생각할지 다른 사람에게 맡겨
둬 보자고 하셨는데, 솔직히 그런 반응을 다른
사람들이 본다면 님을 응원하거나 할 사람 아무도
없을겁니다.

bjl...@dreamwiz.com

unread,
Jul 26, 2001, 7:53:39 PM7/26/01
to

참 그리고 한가지 더.

'척' 한다는 것이란 이런 것입니다.
별로 주장할 것도 없으면서 주장할 것이 많은 양
허세를 부리는 것이죠.

누가 허세를 부리고 있는지 잘 한번 생각해 보시기 바랍니다.

k...@yahoo.com

unread,
Jul 26, 2001, 9:08:10 PM7/26/01
to
>
>안녕하세요 '다른 사람'입니다.
>무슨 일이 있었나 해서 이 쓰레드의 처음부터 주욱
>읽어보았습니다만...
>
>lhc_2001님. 유즈넷에서 토론해야 할 내용은
>토론자의 인성이 아니라 기술적인 내용 아닐까요?
>기술적인 면에서 주장할 것이 있으면 하세요.
>그런 것이 없다면 토론을 접으시면 됩니다.
>
>마지막에 쓰신 글을 보니 mycoboco님을 벤댕이
>라고 부르고 싶으셨던 모양인데, 그렇게 해 보셔야
>자기 얼굴에 똥칠하는 것 밖에 안됩니다.
>
>다른 사람이 어떻게 생각할지 다른 사람에게 맡겨
>둬 보자고 하셨는데, 솔직히 그런 반응을 다른
>사람들이 본다면 님을 응원하거나 할 사람 아무도
>없을겁니다.

글쎄?? 과연.. 사람마다 다 취향이 다른데

그런식으로 다른 사람들의 생각까지

자의적으로 예상 해 버리는건 문제가 있는거 같은데..

또 역으로 mycoboco님의 글에 이 그룹에 오는 모든 사람들이

찬성한다는 예기도 되는데 mycoboco님도 분명히

인신공격성 발언을 가끔 하긴 하던데..

아뭏튼 더이상 남의 감정싸움에 제 3자가 끼여들지 맙시다..

둘이서 개인메일로 하던 만나서 맞장뜨던 알아서 하라고..

c, 컴관련 질문들이 이런류의 글들때문에 묻혀버리는 경우가

많이 생기니까요..

bjl...@dreamwiz.com

unread,
Jul 26, 2001, 9:47:51 PM7/26/01
to

네... 좋으신 말씀입니다.

그런데 메일 주소가 낯이 익군요.

표준 관련 토론 할때 불쑥 나타나서

mycoboco님께 욕같은 말 던지고 사라지셨던 분이

아니신지요?

그당시 그 포스팅 때문에 c, 기술관련 포스팅들이

감정싸움에 묻혀버렸던 것으로 기억합니다만...

lhc_...@yahoo.co.kr

unread,
Jul 26, 2001, 11:50:31 PM7/26/01
to
>안녕하세요 '다른 사람'입니다.

궂이 강조하는 저의가 뭐유? mycoboco님의 시다바리쯤 되쇼?

>lhc_2001님. 유즈넷에서 토론해야 할 내용은
>토론자의 인성이 아니라 기술적인 내용 아닐까요?
>기술적인 면에서 주장할 것이 있으면 하세요.
>그런 것이 없다면 토론을 접으시면 됩니다.

사돈 남말하시 마시고

>마지막에 쓰신 글을 보니 mycoboco님을 벤댕이
>라고 부르고 싶으셨던 모양인데, 그렇게 해 보셔야
>자기 얼굴에 똥칠하는 것 밖에 안됩니다.

벤댕이가 아니라 밴댕이라 하였소. 국어 공부 지질라게 못하셨구랴.
받아쓰기부터 다시 하슈. 글고 낄때 안낄때 주제파악 못하고 껴드는
꼴이 얼굴에 똥칠 화장하고 다니는 꼴이란 생각은 안드오?



>다른 사람이 어떻게 생각할지 다른 사람에게 맡겨
>둬 보자고 하셨는데, 솔직히 그런 반응을 다른
>사람들이 본다면 님을 응원하거나 할 사람 아무도
>없을겁니다.

댁은 내가 연예인으로 보이슈? 당신 같은 화상들이 무슨 변태스런 생각을
하던 말던 관심 없소이다.

>참 그리고 한가지 더.
>'척' 한다는 것이란 이런 것입니다.
>별로 주장할 것도 없으면서 주장할 것이 많은 양
>허세를 부리는 것이죠.
>누가 허세를 부리고 있는지 잘 한번 생각해 보시기 바랍니다.

주제 파악이나 하슈.

>그럼...

할일 없음 변태채팅이나 하쇼. 그럼...

bjl...@dreamwiz.com

unread,
Jul 27, 2001, 12:37:43 AM7/27/01
to

네, 받아쓰기가 틀렸군요.
그점에 관해서는 죄송스럽게 생각합니다.
다른 부분에 대해서는 별로 더 드리고 싶은 말씀이 없군요.
몇가지 확실해진 부분은 있다고 생각됩니다만...

그럼.

여의도소년

unread,
Jul 27, 2001, 1:15:59 AM7/27/01
to
어떻겠습니까?

0 new messages