문은 다음 중 하나일 수 있습니다.

문은 사용자 언어 프로그램이 실행될 때 제어 흐름을 지정합니다. 특정 제어문이 없는 경우 ULP 파일의 모양 순서대로 문이 실행됩니다.

복합 문

블록이라고도 하는 복합 문은 짝이 맞는 괄호({ })로 묶인 문의 리스트(비어 있을 수 있음)입니다. 문법상, 블록은 단일 문으로 간주될 수 있지만 식별자 범위도 제어합니다. 블록 내에 선언된 식별자에는 선언 지점에서 시작하여 닫는 중괄호에서 끝나는 범위가 있습니다.

복합 문은 어떤 깊이로도 중첩될 수 있습니다.

표현식 문

표현식 문은 표현식 다음에 세미콜론이 옵니다.

표현식을 평가하여 표현식 문이 실행됩니다. 이 계산의 모든 부작용은 다음 문이 실행되기 전에 완료됩니다. 대부분의 표현식 문은 지정 또는 함수 호출입니다.

특수 경우는 세미콜론으로만 구성된 빈 문입니다. 빈 문은 아무 작업도 수행하지 않습니다. 하지만 프로그램에 필요하지 않지만 ULP 문법에 필요한 경우에는 유용할 수 있습니다.

제어문

제어문은 프로그램 흐름을 제어하는 데 사용됩니다.

반복 문은 다음과 같습니다.

do...while
for
while

선택 문은 다음과 같습니다.

if...else
switch

점프 문은 다음과 같습니다.

break
continue
return

break

break 문에는 다음과 같은 일반 문법이 있습니다.

break;

또한 가장 가까운 바깥쪽 do...while, for, switch 또는 while 문을 즉시 종료합니다. 이러한 기능은 객체 유형의 루프 멤버에도 적용됩니다.

이러한 모든 문은 어느 깊이로도 혼합되고 중첩될 수 있으므로 break가 올바른 문에서 끝나도록 하십시오.

continue

continue 문에는 다음과 같은 일반 문법이 있습니다.

continue;

또한 가장 가까운 바깥쪽 do...while, while 또는 for 문에 대한 테스트 조건이나 가장 가까운 바깥쪽 for 문의 증분 표현식으로 제어 권한을 전송합니다.

이러한 모든 문은 어느 깊이로도 혼합되고 중첩될 수 있으므로 continue가 올바른 문에 영향을 미치도록 하십시오.

do...while

do...while 문에는 다음과 같은 일반 문법이 있습니다.

do statement while (condition);

또한 조건식이 0이 될 때까지 문을 실행합니다. 조건은 문을 처음 실행한 후에 테스트됩니다. 즉, 문은 항상 한 번 이상 실행됩니다.

문 안에 break 또는 return이 없으면 문이 조건의 값에 영향을 주게 되며, 그렇지 않더라도 무한 루프를 방지하기 위해 condition 자체를 평가 중에 변경해야 합니다.

string s = "Trust no one!";
int i = -1;
do {
   ++i;
   } while (s[i]);

for

for 문에는 다음과 같은 일반 문법이 있습니다.

for ([init]; [test]; [inc]) statement

또한 다음 단계를 수행합니다.

  1. 초기화 표현식 init가 있는 경우 실행됩니다.
  2. test 표현식이 있는 경우 실행됩니다. 결과가 0이 아닌 경우(또는 test 표현식이 없는 경우) 문이 실행됩니다.
  3. inc 표현식이 있는 경우 실행됩니다.
  4. 마지막으로 제어 권한이 2단계로 돌아갑니다.

문 안에 break 또는 return이 없으면 inc 표현식(또는 문)이 test 표현식의 값에 영향을 주게 되며, 그렇지 않더라도 무한 루프를 방지하기 위해 평가 중에 test 자체를 변경해야 합니다.

초기화 표현식 init는 일반적으로 하나 이상의 루프 카운터를 초기화합니다. 새 변수를 루프 카운터로 정의할 수도 있습니다. 이러한 변수의 범위는 for 루프를 둘러싸는 블록의 끝까지 유효합니다.

string s = "Trust no one!";
int sum = 0;
for (int i = 0; s[i]; ++i)
    sum += s[i]; // sums up the characters in s

if...else

if...else 문은 다음과 같은 일반 문법이 있습니다.

if (expression)
   t_statement
[else
   f_statement]

조건식이 평가되고 해당 값이 0이 아닌 경우 t_statement가 실행됩니다. 그렇지 않은 경우 f_statement는 else 절이 있는 경우에 실행됩니다.

else 절은 항상 마지막으로 발생한 else 없는 if를 검색합니다. 이 사항을 원하지 않는 경우 다음과 같이 중괄호를 사용하여 문을 그룹화해야 합니다.

if (a == 1) {
   if (b == 1)
      printf("a == 1 and b == 1\n");
   }
else
   printf("a != 1\n");

return

void 이외의 반환 유형이 있는 함수에는 문법이 있는 return 문이 하나 이상 포함되어야 합니다.

return expression;

여기서 표현식은 함수의 반환 유형과 호환되는 유형으로 평가되어야 합니다. 표현식 값은 함수에서 반환된 값입니다.

함수가 void 유형인 경우 표현식이 없는 return 문을 사용하여 함수 호출에서 반환할 수 있습니다.

switch

switch 문에는 다음과 같은 일반 문법이 있습니다.

switch (sw_exp) {
  case case_exp: case_statement
  ...
  [default: def_statement]
  }

또한 sw_exp(정수 유형이어야 함)의 값에 따라 여러 case 레이블이 있는 문 중 하나로 제어 권한을 전송할 수 있습니다.

case_statement에는 하나 이상의 case 레이블로 레이블을 지정할 수 있습니다. 각 case 레이블의 case_exp는 바깥쪽 switch 문 내에서 고유한 상수 정수로 평가되어야 합니다.

default 레이블이 하나만 있을 수도 있습니다.

sw_exp를 평가한 후에는 case_exp가 일치하는지 확인됩니다. 일치하는 항목이 발견되면 일치하는 case 레이블이 있는 case_statement로 제어 권한이 전달됩니다. 일치하는 항목이 없고 default 레이블이 있으면 제어 권한이 def_statement로 전달됩니다. 그렇지 않은 경우 switch의 어떤 문도 실행되지 않습니다.

casedefault 레이블이 발견될 경우 프로그램 실행은 영향을 받지 않습니다. 제어 권한은 레이블을 통해 다음 문으로 전달됩니다.

특정 사례에 대한 문 그룹의 끝에서 실행을 중지하려면 break 문을 사용합니다.

string s = "Hello World";
int vowels = 0, others = 0;
for (int i = 0; s[i]; ++i)
    switch (toupper(s[i])) {
      case 'A':
      case 'E':
      case 'I':
      case 'O':
      case 'U': ++vowels;
                break;
      default: ++others;
      }
printf("There are %d vowels in '%s'\n", vowels, s);

while

while 문에는 다음과 같은 일반 문법이 있습니다.

while (condition) statement

또한 condition 표현식이 0이 아닌 경우 문을 실행합니다.

조건은 문의 가능한 첫 번째 실행 전에 테스트됩니다. 즉, condition이 초기에 0인 경우 문이 실행되지 않을 수 있습니다.

문 안에 break 또는 return이 없으면 문이 조건의 값에 영향을 주게 되며, 그렇지 않더라도 무한 루프를 방지하기 위해 condition 자체를 평가 중에 변경해야 합니다.

string s = "Trust no one!";
int i = 0;
while (s[i])
      ++i;