모호해

http://gpgstudy.com/forum/viewtopic.php?t=21219

에서 이어짐.

그러니까 C/C++ 에서 comma 연산자는 expression 에서 등장했을때 대략 세가지 (혹은 그이상의) 의미를 지닌다.

1. 두 expression 를 묶어서 하나의 expression 으로 만든다.
2. argument 의 구분자로 쓰인다.
3. operator overloading 으로 1도, 2도 아닌 무언가 다른 동작을 만들 수 있다.

결국 comma 가 코드에 등장했을때 그게 정확히 무슨일을 할지 그 코드만 봐서는 쉽게 알수 없다. 따지고 보면 1 과 2 는 모호하다. 이를테면 아래 코드에서


func( 1, 2 )

위 코드는 func 에 1과 2 두개의 argument 를 던지는 코드일수도 있지만 1,2 를 comma 를 이용한 하나의 expression 으로 본다면 func( 2 ) 로 해석될 수도 있다. 이런걸 방지하려면 규칙에 예외를 추가해야 된다.


In contexts where comma is given a special meaning, [Example: in lists of arguments to functions (expr.call) and lists of initializers (dcl.init) ] the comma operator as described in clause expr can appear only in parentheses.

난 이런걸 별로 좋아하지 않는다. 내친김에 다른 언어들의 경우도 살펴보자.


$:/home/testors> python
Python 2.5.2 (r252:60911, May 26 2008, 13:39:58)
[GCC 4.2.1 20070719  [FreeBSD]] on freebsd7
Type “help”, “copyright”, “credits” or “license” for more information.
>>> 1,2
(1, 2)
>>>
$:/home/testors> perl
1,2
$:/home/testors> ruby
1,2
-:1: syntax error, unexpected ‘,’, expecting $end

참고로 난 루비를 가장 좋아한다. python, perl 은 학습 도중에 짜증이 솟구쳤었는데 ruby 는 모든것이 직관과 의도대로 동작했기 때문에 아무것도 학습할 필요가 없었기 때문이다.

“모호해”에 3개의 응답

  1. 하얀까마귀 님의 말:

    그러고보니 옛날부터 궁금했던 것중에 하나인데, 저 1번이 의미있게 (‘요긴하게’까지는 아니라도…) 사용되는 용례는 대체 어떤게 있나요?

    C에서도 쓸만한 예를 본적이 없었지 말입니다.

  2. Ged 님의 말:

    ,를 연산자로 쓰면 구분자는 뭘로 해야하는건가요.. orz

댓글 남기기