"if"및 "while"과 함께 사용되는 언어에서 표현식에 괄호가 필요한 이유는 무엇입니까?


67

에서 사용할 때 C, Java 및 C와 같은 언어 ++ 모두는 전체 표현식 주위에 괄호가 필요 if, while또는 switch.

if (true) {
    // Do something
}

반대로

if true {
    // Do something
}

괄호가 중복되어 있기 때문에 이것은 이상하게 보입니다. 이 예에서는 true자체적으로 단일 표현식입니다. 괄호는 내가 아는 방식으로 그 의미를 변형시키지 않습니다. 왜이 이상한 구문이 존재하고 왜 그렇게 일반적입니까? 내가 모르는 이점이 있습니까?


20
파스칼 에는 괄호가 필요하지 않습니다 (을 요구하기 때문에 THEN).
JimmyB

30
파이썬, 루비는 그렇지 않습니다.
smci

31
괄호는 단일 문 본문에 대해 선택 사항이므로 C는 괄호를 사용한다고 생각합니다. 또는 더 나은 방법은 중괄호가 if명령문의 일부가 아니라 복합 명령문을 작성하는 것입니다.
프레드 라슨

7
흥미롭게도 괄호가 아닌 중괄호가 필요합니다.
코스

25
문제는 약간 긴장이되어있다. 둥근 맨홀은 왜 모든 라운드를 덮습니까? 왜 모든 형제들이 남자입니까? 왜 Paren-requiring-languages는 parens를 필요로합니까? 둥근 맨홀 뚜껑은 정의에 따라 둥글다. 형제는 정의상 남성입니다. Parens가 필요한 언어는 정의에 따라 Parens가 필요합니다.
Eric Lippert

답변:


155

있을 필요가 몇 가지 조건이 끝나고 분기가 시작되는 이야기의 방법. 그렇게하는 방법에는 여러 가지가 있습니다.

일부 언어에서 더 조건문이없는 모든 스몰 토크, 자기, 신어, 이오, Ioke, Seph, 팬시에서 예. 조건부 분기는 다른 방법과 마찬가지로 일반적인 방법으로 간단하게 구현됩니다. 이 메소드는 부울 오브젝트에서 구현되며 부울에서 호출됩니다. 그런 식으로 조건은 단순히 메소드의 수신자이며 두 분기는 예를 들어 스몰 토크에서 두 가지 인수입니다.

aBooleanExpression ifTrue: [23] ifFalse: [42].

Java에 익숙한 경우 다음과 같습니다.

aBooleanExpression.ifThenElse(() -> 23, () -> 42);

Lisp 계열의 언어에서는 상황이 비슷합니다. 조건은 단지 정상적인 함수 (실제로는 매크로)이고 첫 번째 인수는 조건이고 두 번째 및 세 번째 인수는 분기이므로 일반 함수 인수 일뿐입니다. 그들을 구분하는 데 특별한 것이 필요하지 않습니다.

(if aBooleanExpression 23 42)

일부 언어는 키워드를 구분 기호로 사용합니다 (예 : Algol, Ada, BASIC, Pascal, Modula-2, Oberon, Oberon-2, Active Oberon, Component Pascal, Zonnon, Modula-3) :

IF aBooleanExpression THEN RETURN 23 ELSE RETURN 42;

Ruby에서는 키워드 또는 표현식 구분 기호 (세미콜론 또는 줄 바꿈)를 사용할 수 있습니다.

if a_boolean_expression then 23 else 42 end

if a_boolean_expression; 23 else 42 end

# non-idiomatic, the minimum amount of whitespace required syntactically
if a_boolean_expression
23 else 42 end

# idiomatic, although only the first newline is required syntactically
if a_boolean_expression
  23
else
  42
end

Go 는 브랜치가 블록이어야하고 표현식이나 문장을 허용하지 않으므로 중괄호가 필수입니다. 따라서 원하는 경우 추가 할 수 있지만 괄호는 필요하지 않습니다. Perl6과 Rust는 이와 관련하여 비슷합니다.

if aBooleanExpression { return 23 } else { return 42 }

일부 언어는 영숫자가 아닌 다른 문자를 사용하여 조건을 구분합니다 (예 : Python).

if aBooleanExpression: return 23
else: return 42

결론은 : 당신이 필요로하는 몇 가지 조건이 끝나고 분기가 시작되는 이야기의 방법. 그렇게하는 방법에는 여러 가지가 있으며 괄호는 그중 하나 일뿐입니다.


8
아주 좋은 개요.
피터-모니카 복원 복원

2
물론 베어 표현식이 명령문이 아닌 언어 (예 : 계산 된 값이 변수에 지정되거나 다른 명령문에 전달되어야하는 이전 BASIC과 같은 언어) 또는 항상 접두사 연산자가없는 경우 어쨌든 표현의 끝과 진술의 시작을 식별합니다. IF 문 끝에서 구분 기호없이 기본 변형을 관리하는 것을 볼 수있었습니다.
Periata Breatta

4
또한 C는 70 년대에 설계되었으며 계산 비용이 많이 들기 때문에 작은 괄호를 추가하면 구문 분석기를 좀 더 쉽게 작성할 수 있습니다.
Machado

4
다시 : Lisp : "실제로 매크로". 실제로 IF는 Scheme과 CL의 특별한 형식입니다 (완전성을 위해).
coredump 2018

1
@Leushenko : 예를 들어, 기본적으로 게으른 MISC에서 모든 조건부 형식은 매크로 나 특수 형식이 아닌 정상적인 함수일뿐입니다. (사실, AFAIR는 MISC는이 제로 특별한 형태?)
요 르그 W MITTAG

70

괄호는 중괄호를 사용하는 경우에만 필요하지 않습니다.

if true ++ x;

예를 들어 그것들이 없으면 모호해진다.


28
@RobertHarvey- 내가 알고있는 거의 모든 언어에 괄호 필요합니다. 확실히 C와 그 친족. 그들은 왜 영업 이익은 요구하고 있다 필요 -와 언어가 다른 모호한 될 것 때문이다.
Telastyn

25
내 머리 꼭대기에서 괄호는 if기본, 어셈블리, 파이썬, bash / zsh, tcl, 배치, brainfuck 또는 기계 코드에 필요하지 않습니다. 괄호가 없으면 if언어가 언어에 의존하도록 디자인 된 경우 에만 모호합니다.
candied_orange

12
파스칼 (Delphi 포함)에서 가장 논리적이고 읽기 쉬운 버전을 언급 한 사람은 아무도 없다는 사실에 놀랐습니다 if Condition then ....
Ulrich Gerhardt

18
Go는 그 반대의 좋은 예입니다. 그것은 중괄호를 {}강제로 만들기 때문에 표현 주위에 괄호가 필요하지 않습니다. 뿐만 아니라 괄호가 필요하지 않습니다하지만 제대로 괄호를 추가 기억 경우 컴파일 오류가 발생합니다 - 그들은 금지하고
slebetman

10
@Eiko 문구를 바꾸겠습니다. 대답의 예는 의미 상 모호하지 않지만 구문 적으로 모호합니다 . 그러나 구문 분석 단계는 의미 론적 분석 전에 발생하기 때문에 파서는 모호성을 겪게되며, 정보를 모르는 추측을하거나 실패해야합니다. (어떤 이유로 든) 파서가 실패하지 않기로 선택하면 시맨틱 분석기는 결과 트리에 관계없이 작동합니다. 시맨틱 분석기가 파서에게 하위 트리를 재분석하고 구문 적으로 모호한 구문에서 다른 선택을하도록 요청하는 컴파일러를 보지 못했습니다.
Theodoros Chatzigiannakis

21

에서 괄호 if문은 산술 식 내에서 사용되는 괄호와 같은 의미가 없습니다. 산술 표현식의 괄호는 표현식을 함께 그룹화하는 데 사용됩니다. if명령문의 괄호 는 부울 표현식을 구분하는 데 사용됩니다. 즉, 부울 표현식을 나머지 if명령문 과 구별합니다 .

에서 if문 괄호 그룹화 기능을 수행하지 않는 (그래도 내 if문, 당신은 여전히 그룹 산술 식에 괄호를 사용할 수 있습니다. 괄호의 외부 세트는 다음 전체 부울 식을 구분하는 역할을한다). 컴파일러를 사용하면 컴파일러가 항상 존재하는 괄호에 의존 할 수 있으므로 컴파일러를 단순화 할 수 있습니다.


컴파일러가 어떻게 단순화되는지 알 수 없습니다. 규칙 'IF'( 'expression') '문은보다 간단하지 않습니다 IF primary_expression statement. 후자는 마찬가지로 모호하지 않습니다.
user58697

@ user58697 : 아니요. 후자 만 접미사 연산자를 primary_expressionexpression-statement의 접두사 연산자와 구별 할 수없는 모호성이 있습니다. Telastyn의 답변을 복사하려면 if true ++ x;. 또한 빈 명령문이 존재 if a & f;하는 &경우 조건 내의 빈 명령문 및 2 진 이거나 &명령문 시작시 단 항일 수 있습니다. 그러나 괄호와 일치하면 오프닝과 정확히 일치하는 항목이 하나 있습니다 (
MSalters

@MSalters 접미사 연산자는 기본으로 구문 분석 하지 않습니다 . 주된 표현 중 하나입니다 IDENTIFIER, CONSTANT, STRING_LITERAL'(' expression ')'.
user58697

@ user58697 : 당신은 특정 언어를 염두에두고있는 것 같습니다. 그리고 조건이 "IDENTIFIER, CONSTANT 또는 STRING_LITERAL"인 경우에만 괄호가 필요하지 않은 규칙이 있습니다. 나는 그것이 일을 더 쉽게 만드는지 확신하지 못한다.
MSalters

16

다른 사람들이 이미 부분적으로 지적했듯이 이것은 표현식도 유효한 명령문이기 때문에 하나의 명령문이있는 블록의 경우 중괄호를 삭제할 수 있습니다. 이것은 다음이 모호하다는 것을 의미합니다.

if true
    +x;

다음과 같이 해석 될 수 있기 때문입니다.

if (true + x) {}

대신에:

if (true) {+x;}

여러 언어 (예 : Python)를 사용하면 괄호를 피할 수 있지만 여전히 종료 조건 마커가 있습니다.

True 인 경우 : + x

그러나 당신은 우리가 옳다 수있는 표현 인 언어 : 괄호가 필요하지 않습니다 언어를 정의 하지 유효한 문이 문제가없는 것이다.

불행히도 이것은 다음과 같은 것을 의미합니다.

 ++x;
 functionCall(1,2,3);

유효한 명령문 이 아니므 로 표현식을 작성하지 않고 이러한 조치를 수행 할 수 있도록 이상한 구문을 도입해야합니다. 이를 수행하는 간단한 방법은 다음과 같은 마커로 표현식 앞에 추가하는 것입니다 [statement].

[statement] ++x;
[statement] functionCall(1,2,3);

이제 다음과 같이 작성해야하기 때문에 모호성이 사라집니다.

if true
    [statement] ++x;

그러나 당신이 볼 수 있듯이 if조건에 (또는 :그 끝에) 괄호 를 두는 것이 모든 표현 문장에 대해 그러한 표시를하는 것보다 훨씬 낫기 때문에 그러한 언어가 널리 퍼져있는 것을 보지 못합니다 .


참고 : [statement]마커 사용은 내가 생각할 수있는 가장 간단한 구문입니다. 그러나 이러한 마커가 필요하지 않은 표현식과 명령문에 대해 완전히 구별되는 두 가지 구문을 가질 있습니다. 문제는 표현에서 동일한 작업을 수행하거나 완전히 다른 구문을 사용해야하는 명령문에서 언어가 매우 이상하다는 것입니다.

그러한 명시 적 마커없이 두 개의 별도 구문을 사용하는 것을 염두에 두어야 할 한 가지는 다음과 같습니다. 강제 문은 유니 코드 기호를 사용하도록합니다 (따라서 for문자의 유니 코드 변형을 사용하는 대신 f, or). ASCII 만.


2
실제로 이러한 표현식 명령문 마커를 사용하는 언어가 존재합니다. 부작용에 대한 표현식을 평가하려면 discardNim의 값 을 명시 적으로 지정해야합니다 . 그러나 이것은 구문상의 이유로가 아니라 형식 안전성을 위해서만 수행되었습니다.
amon

@ amon Nice, 나는 그것에 대해 몰랐습니다. 어쨌든, 마커가 실제로 필요하지 않다는 것은 직관적이지 않은 구문을 발명하지 않고 그 구별을 달성하는 간단한 방법 일뿐입니다.
Bakuriu

1
@amon-많은 BASIC 변형은 표현식과 명령문을 엄격하게 구분합니다. 표현식은 값이 실제로 사용될 위치에서만 허용됩니다 (예 : 변수 지정, 조치를 수행하는 PRINT와 같은 명령문 등). 값을 계산하는 데 사용되지 않는 프로시 저는 이름 앞에 접두어가 붙는 키워드 (일반적으로 "CALL", 적어도 하나는 "PROC"를 사용하지만, "CALL")에 의해 호출됩니다. 등등. BASIC은 일반적으로 "THEN"으로 IF 문에서 표현식의 끝을 구분하지만 요구 사항을 제거 할 수없는 기술적 이유는 없습니다.
Periata Breatta

1
80 년대에는 Parens, 괄호, 콜론 또는 다른 마커가없는 블록이 있고 표현식을 모든 곳에서 문장으로 허용하고 일부 문장은 표현식처럼 행동합니다 (+ = 및 ++와 같은 복합 연산자). 그것은 컴파일러 앞에 멍청한 전처리 기가 있습니다 (실제로는 심볼은 ?PP 이후의 함수입니다). 없습니다 ;. 물론, 연속 선에 대한 마커가 필요하지만 권장하지 않습니다. harbour.github.io/doc/clc53.html#if-cmd . 컴파일러는 빠르고 간단합니다 (Bison / Flex로 작성).
Maniero

@bigown 논리 조건에 대해 별도의 구문을 사용하여 달성하므로 기본적으로 if, whileecc 의 조건 은 다른 언어에서 사용되는 일반 표현식에 비해 제한됩니다. 물론 : 구문, 표현, 논리 표현, 커피 만들기 표현 등과 같은 구문 범주가 두 개 이상인 경우 자유를 교환 할 수 있습니다.
Bakuriu

10

C 계열 언어는 이러한 괄호를 요구하는 것이 일반적이지만 보편적 인 것은 아닙니다.

펄 6의 더 눈에 띄는 구문 변화 중 하나는 괄호를 주위에 제공 할 필요가 없도록 그들이 문법을 수정한다는 것입니다 if, for유사한 문 '조건. 따라서 이와 같은 것은 Perl 6에서 완벽하게 유효합니다.

if $x == 4 {
    ...
}

그대로

while $queue.pop {
    ...
}

그러나 그것들은 단지 표현식이기 때문에 원한다면 괄호를 넣을 수 있습니다.이 경우 C, C #, Java 등 구문의 필수 부분 대신 일반 그룹화 그룹입니다.

Rust는이 부서에서 Perl 6과 비슷한 문법을 ​​가지고 있습니다 :

if x == 4 {
    ...
}

더 현대적인 C 영감 언어의 특징은 이런 것을보고 제거하는 것에 대해 궁금해하는 것 같습니다.


귀하의 답변은 다른 언어에 대한 통찰력을 제공하지만 "이 이상한 구문이 왜 존재하며 왜 그렇게 일반적입니까?"

당신은 꽤 정확합니다. 나는 질문에 컨텍스트를 추가하고 싶었습니다.이 플랫폼에서는 쉬운 일이 아닙니다. 궁극적으로 질문에 대한 답변을 제공하면 "문법이 없었기 때문에 기술적 인 이유가 없기 때문에"라고 생각합니다. 그러나 이것은 유용한 답변이 아닙니다.
Matthew Walton

Perl 5에는 둘 다 있습니다. BLOCK을 사용 하는 일반 if 또는 루프 구성의 경우, 예를 들어 in if ( $x == 4 ) { ... }또는 등 이 필요합니다 foreach my $foo ( @bar ) { ... }. 접미사 표기법을 사용하는 경우 return unless $foo;또는 에서와 같이 괄호는 선택 사항 ++$x while s/foo/bar/g;입니다.
simbabque

6

기존 답변 중 어느 것도 제기되지 않았다는 것에 놀랐습니다.

C와 많은 C 파생물과 모양 은 할당 값이 할당 된 값 이라는 점에서 특이 합니다. 그 결과 값이 예상되는 곳에 할당을 사용할 수 있습니다.

이것은 당신이 같은 것을 쓸 수 있습니다

if (x = getValue() == 42) { ... }

또는

if (x == y = 47) { ... }

또는

unsigned int n = 0 /* given m == SOME_VALUE */;
while (n < m && *p1++ = *p2++) { n++; }

( while (n < m && *p1++ = *p2++ != 0) { n++; }C가 0이 아닌 것을 사실로 취급하기 때문에 암시 적으로 처리됩니다 . 그러나 우연히 C 표준 라이브러리의 strncpy ()에 불과하다고 생각합니다)

또는

if (x = 17);

그리고 그것은 모두 유효합니다. 구문 적으로 유효한 모든 조합이 반드시 유용한 것은 아니며 (현대의 컴파일러는 공통 오류이므로 조건부 내부의 할당에 대해 특히 경고합니다) 실제로 일부는 유용합니다.

조건식이 시작되고 끝나는 위치를 결정하는 명확한 방법이 없다면 그러한 진술을 파싱하는 것이 훨씬 어려울 것입니다.

괄호는 이미 함수 인수에서 함수 이름을 구분하는 데 사용되었으므로 키워드 인수에서 키워드를 구분하는 자연스러운 선택처럼 보였습니다.

물론 다른 구문도 동일한 작업을 수행하도록 정의 할 수 있습니다. 그러나 그렇게하면 특히 파서에서 복잡성이 증가하여 거의 동일한 것을 위해 두 가지 다른 구문 세트를 처리해야합니다. C를 설계 할 당시에는 컴퓨팅 성능 (숫자 처리 능력, 작업 메모리 및 저장 용량 측면에서)이 극히 제한적이었습니다. 가독성에 거의 또는 전혀 비용을 들이지 않고 복잡성을 줄인 것은 거의 확실히 환영받는 변화였습니다.

괄호를 사용하면 오늘날 약간 구식으로 보일지 모르지만 언어에 익숙한 사람이 있다면 같은 것을 표현할 수있는 다른 구문에 비해 가독성이 떨어집니다.


5

그 이유는 대부분 역사입니다.

최초의 C 컴파일러가 작성 될 당시 컴퓨터에는 컴파일러 작성기를 도와주는 도구가 거의없는 "수동으로"작성된 램, CPU 및 컴파일러가 매우 제한적입니다. 따라서 복잡한 규칙은 컴파일러에서 구현하는 데 많은 비용이 들었 습니다. C ++, C #, Java 등은 모두 C 프로그래머가 쉽게 배울 수 있도록 설계 되었으므로 "필요하지 않은"변경은 없었습니다.

'c like'언어에서 조건부 ( if, while, etc)에는 명시 적 block오프 코드가 필요하지 않으며 간단한 명령문 만 사용할 수 있습니다.

if (a == d) doIt()

또는 당신은 compound statement그것들을{}

우리는 컴파일러가 오류를 찾아서 이해할 수있는 오류 메시지를 표시하는 것을 좋아합니다.


3

Java와 C ++는 C가 매우 인기있는 프로그래밍 언어가 된 후에 개발되었습니다. 각 언어의 디자인에서 한 가지 고려해야 할 점은 C 프로그래머에게 호소하고 해당 프로그래머에게 새로운 언어를 사용하도록 요구한다는 것입니다. (저는 그들이 성공한 C 프로그래머 중 하나였습니다.) 또한 C ++은 C 코드와 (거의) 상호 교환 가능하도록 설계되었습니다. 이러한 목표를 지원하기 위해, 모두 C ++와 자바의 조건 주위에 괄호를 포함하여, C의 구문의 대부분 채택 if, while그리고 switch문을.

따라서 이러한 모든 언어가 해당 문장의 조건에 대해 괄호를 요구하는 이유는 C가 그렇기 때문이며, 실제로 C가 그 괄호를 요구하는 이유입니다.

C 언어의 기원은 이 기사 에서 개발의 주요 저자 중 하나 인 Dennis Ritchie에 의해 설명됩니다 (일부 는 개발 주요 저자 라고 할 수도 있음 ). 이 기사에서 알 수 있듯이 C는 원래 1970 년대 초에 메인 메모리의 공간이 극히 제한된 컴퓨터의 시스템 프로그래밍 언어로 개발되었습니다. 어셈블리 언어보다 높은 수준의 언어를 사용하는 것이 바람직했지만, 사용할 수있는 리소스가 제공되므로 언어를 쉽게 파싱하는 것이 중요했습니다. 괄호를 요구하면 조건부 코드를 비교적 쉽게 식별 할 수 있습니다.

더 적은 문자를 사용하여 프로그램을 작성하는 기능이 유리한 것으로 간주 될 수 있으며 두 개의 괄호 THEN는 당시 FORTRAN 및 기타 고급 언어에서 사용 된 키워드보다 공간을 덜 차지 합니다. 실제로 괄호는 공백을 기호의 구분자로 대체 할 수 있기 때문에 if(a==b)전체 문자가 4 자보다 짧았습니다 IF a==b THEN.

어쨌든, 인간이 C로 작성된 프로그램을 읽고, 읽고, 이해하는 것이 얼마나 쉬운 지, 컴파일러가 C로 작성된 프로그램을 쉽게 파싱하고 컴파일 할 수있는 정도, 몇 킬로바이트 (!)인지에 대한 균형이 맞아야했습니다. 프로그램 소스와 컴파일러 자체에 필요합니다. 그리고의 조건 괄호 if, while그리고 switch 문은 사람들이 C의 디자인이 균형을 선택하는 방법이었다

몇 가지 다른 답변에서 알 수 있듯이 C가 개발 된 특정 환경을 제거하면 다양한 프로그래밍 언어의 조건에 모든 종류의 대체 구문이 사용되었습니다. 따라서 괄호는 실제로 역사상 특정 ​​시간에 특정 제약 조건 하에서 소수의 사람들이 내린 디자인 결정에 달려 있습니다.


C ++이 "그러한 프로그래머가 새로운 언어를 사용하도록하기 위해"설계된 방식으로 설계되었다고 말하는 것은 공정하지 않습니다. 클래스가있는 C를 기억 하십니까?
CVn

@ MichaelKjörling 분명히 자바 개발자들은 "우잉"에 대해 훨씬 더 분명했다. 그러나 Stroustrup이 C를 그의 언어의 기초로 C로 시작하기로 선택한 한 가지 이유 때문에 관련 기사에서 C 가 널리 사용 되었다고 언급 합니다. 기존 코드를 쉽게 적용 할 수 있기 때문에 (내가 이미 언급 한 바와 같이)이 C에 가까운 곳에 머무르고 동기 부여를 제공하는 한 가지 방법이었다 -뿐만 아니라 기존의 코더는 쉽게 적응할 수있다.
David K

@ MichaelKjörling 나는 내 대답의 원래 문구가 "우잉"이 언어 설계에서 실제로보다 더 큰 요소라고 제안했다고 가정합니다. 나는 언어 디자인을 고려한 것이 단지 하나 라는 것을 명확히하기 위해 답을 편집했습니다 .
David K

3

여기서 많은 사람들은 괄호가 없으면 구문이 모호하고 이것이 어쨌든 나쁘거나 불가능한 상황이라는 것을 조용히 암시합니다.

실제로 언어에는 모호성을 처리하는 많은 방법이 있습니다. 운영자 우선 순위는이 주제의 한 예일뿐입니다.

아니요, 모호성은 괄호의 이유가 아닙니다. 조건 주위에 괄호가 필요하지 않은 C 버전을 만들 수 있다고 생각합니다 (따라서 옵션으로 만들 수 있음). 모든 경우에 유효한 코드를 만듭니다. 의 예는 또는 보다 적절한 것으로 if a ++ b;해석 될 수 있습니다 .if (a) ++b;if (a++) b;

Dennis Ritchie가 왜 ()을 필수 언어로 만들고 (많은 파생 언어를 위해이 밈을 만들어내는) 것에 대한 질문은 다소 언어적인 것입니다. 나는 조건이 명령 이 아니라 표현 이라는 것을 분명히 진술한다는 개념 이 생각의 아버지라고 생각합니다.

실제로 C는 원 패스 파서를 사용하여 구문 분석 가능하도록 설계되었습니다. 조건 주위에 필수 괄호와 함께 구문을 사용하면이 측면을 지원합니다.


내 대답에 공감대가 보입니다. 댓글에 마음에 들지 않은 점을 설명해주세요. 어쩌면 내가 그것을 향상시킬 수 있습니다.
Alfe

0

ifFortran, Cobol, PL / 1, Algol, Algo-68, Pascal, Modula, XPL, PL / M, MPL, ... 또는 then키워드 가있는 다른 언어에서는 조건에 대한 괄호 가 필요하지 않습니다 . 다음 then을 구분하는 역할을합니다 .conditionstatement

C 등의 닫는 괄호는로 기능하며 then, 여는 괄호 는 공식적으로 중복됩니다.

위의 설명은 전통적으로 구문 분석 된 언어에 적용됩니다.


포트란 구조 버전을 포함하여 모든 버전의 IF에서 괄호를 요구합니다.
Netch
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.