C/C++에 이런 syntax추가하면 어떨까요?

prether의 이미지

아시다시피 for loop syntax는 다음과 같이 되어 있습니다.

for(initialization statement;test expression;update expression)
 body

위와 같이 for 다음 괄호안은 semicolon(;)에 의해 3개 부분으로 분리되어 있습니다.

여기에 4번째 부분으로 loop를 벗어날 때 실행되는 termination statement를 optional하게 추가하면 어떨까요?

다음과 같이 말이죠.

for(initialization statement;test expression;update expression;termination statement)
 body

이렇게 되면 다음과 같은 기존 C code가 매우 깔끔해질 거라고 봅니다.

#include <stdio.h>
#include <string.h>
 
int main()
{
        char *msg = "1234567890";
        size_t i;
 
        for(i=0;i<strlen(msg);i++)
                printf("(%hhd)", msg[i]);
        printf("\n");
 
        return 0;
}

위 C code안의 printf("\n"); statement와 같이 for loop를 빠져나갈 때 한 번 실행하는 statement가 존재하는 경우가 흔합니다.

그럴 경우 아래와 같이 for 다음 괄호안에 4번째 termination statement자리에 printf("\n")를 넣어주면 보기가 좋지 않을까요?

#include <stdio.h>
#include <string.h>
 
int main()
{
        char *msg = "1234567890";
        size_t i;
 
        for(i=0;i<strlen(msg);i++;printf("\n"))
                printf("(%hhd)", msg[i]);
 
        return 0;
}

누가 이미 먼저 생각했을까요? 여러분의 기탄없는 의견 부탁드립니다.

klyx의 이미지

코드가 제대로 안나와서 어떤 예제를 드셨는지 모르겠네요.
말씀하신 loop를 벗어나는 조건은 for (;true;)같이 가운데에서 체크하는 것과 다른 것인가요?

prether의 이미지

C code가 안보여서 code 태그를 이용하여 잘 보이도록 수정했습니다.

그리고 추가된 termination statement외에 기존 3 부분의 의미와 쓰임새는 예전과 같습니다.

/***************************************
Being the one is just like being in love.
***************************************/

/***************************************
Being the one is just like being in love.
***************************************/

winner의 이미지

드래곤볼의 그?....

mukka의 이미지

보기가 더 불편합니다.
자세히 말하면, for 구문의 의미(semantic)와 관련없는 구문이 for 구문 안으로 들어와서 더 읽기 힘들고, 모호하게 느껴집니다.
이건 단지 개인적인 의견입니다 (no offense).

klyx의 이미지

저도 개인적으론 불필요해보이네요.
for문의 update statement처럼 자주 쓰이는 것도 아니고, 딱히 저렇게 한다고 저한테는 깔끔해보이진 않네요.
만약 필요하다면 다음과 같이 정의해서 쓰면되지 않을까요?

#define my_for(init, test, update, terminated, code) for (init; test; update) {code} terminated;
my_for(i=0, i<strlen(msg), i++, printf("\n"), {
        printf("(%hhd)", msg[i]);
})

M.W.Park의 이미지

common lisp의 세계로 초대합니다. ^^;
예시한 것보다 더한 짓(?)도 가능합니다.

실제로 loop 수행중이나 끝날 때 뭔가를 하는 것(결과를 collect한다든지)은 유용한 경우가 많습니다.
-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

corba의 이미지

한국엔 사용자들이 너무 없어서 혼자서 공부하고 있는데 힘들어요 ㅠㅠ

M.W.Park의 이미지

그나마 근자에는 lisp.or.kr도 없어진듯하고, 사용자층이 많지 않은 것은 사실인듯합니다.

정리가 잘 안되어있고 횡설수설이긴 하지만 제 블로그에 emacs slime, 한글설정, clsql 등에 관한 포스팅이 몇개 있습니다.

http://manywaypark.tistory.com/

실무에 lisp을 조금씩 적용하면서 막혔던 부분들을 정리한 것이라 학습용도로는 적합하지 않을 수도 있겠네요. ^^

-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

Fe.head의 이미지

for문 마지막에 ; 대신 , 를 쓰면 됩니다.

#include <stdio.h>
 
int main()
{
    int i = 0;
    for( i = 0 ; i < 10 ; ++i, printf("\n") )
        printf("%d", i );
 
    return 0;
}

-----------------------
과거를 알고 싶거든 오늘의 네 모습을 보아라. 그것이 과거의 너니라.
그리고 내일을 알고 싶으냐?
그러면 오늘의 너를 보아라. 그것이 바로 미래의 너니라.

고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"

Fe.head의 이미지

으음. 제가 생각하는것이 아니였군요^^
-----------------------
과거를 알고 싶거든 오늘의 네 모습을 보아라. 그것이 과거의 너니라.
그리고 내일을 알고 싶으냐?
그러면 오늘의 너를 보아라. 그것이 바로 미래의 너니라.

고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"

winner의 이미지

하지만 Python의 while else나 for else 형태라면 생각해 볼 수 있습니다.
그 형태는 반복문의 종료상태가 영향을 주는 형태이니까요.

d3m3vilurr의 이미지

C언어는 루프 안에서 선언이 안되기 때문에 루프 조건 완료 후 실행은

for (i = 0; i < 10; i++)
  doSomething();
if (i >= 10)
  caseLoopTestFalse();

가 되긴 하겠습니다만, 확실히 볼때 if과정을 한번 더 봐야 한다는 것은 찝찝합니다.
- 루프가 끝났다는 것은 자명한데도 말이죠.

하지만 위에서 몇분이 언급한것처럼 잘 쓰이지도 않는 완료시 실행을 위해 별도의 플래그를 둘 필요가 있나도 있어서
오히려 winner님 말처럼 파이썬 같은데서 else 같은걸 차용해 붙이는게 더 의미적으로 깔끔해지지 않을까요?

for (i = 0; i < 10; i++)
  doSomething();
else
  caseLoopTestFalse();
finalize
  loopEnd();

이런식으로 말이죠.

그래도 깔끔하진 않네요;)