programing

블록 안에 있는 ";"는 무엇을 의미합니까?

megabox 2023. 6. 28. 21:33
반응형

블록 안에 있는 ";"는 무엇을 의미합니까?

누가 이걸 왜 쓰겠어요?

if(a==1){;} 

문이 없고 세미콜론이 하나만 있고 오류가 발생하지 않습니다.이 세미콜론은 어떤 용도로 사용됩니까?

빈말입니다.단일 세미콜론은 자체적으로 작업을 수행하지 않습니다.

이 맥락에서, 그것은 만약에if조건이 참입니다. 아무것도 하지 마십시오.

없이else섹션, 이 코드는 별로 사용되지 않습니다.만약 있다면, 조건이 뒤집혀 비어 있지 않은 것만 포함해야 하는지 여부는 스타일의 문제입니다.if부분.

이 경우 단순한 조건부이므로 스타일적으로 뒤집는 것이 더 좋지만 조건이 더 복잡할 경우 이런 식으로 쓰는 것이 더 명확할 수 있습니다.예를 들어, 다음과 같습니다.

if ((a==1) && (b==2) && (c==3) && (d==4)) {
    ;
} else {
    // do something useful
}

이보다 더 명확할 수 있습니다.

if (!((a==1) && (b==2) && (c==3) && (d==4))) {
    // do something useful
}

또는 다음과 같습니다.

if ((a!=1) || (b!=2) || (c!=3) || (d!=4)) {
    // do something useful
}

코멘트에서 더 좋은 예를 들어보겠습니다(감사합니다 Ben).

if (not_found) {
    ;
} else {
    // do something
}

비교:

if (!not_found) {
    // do something
}

어떤 방법을 사용할지는 비교 대상, 항 수, 항이 내포된 개수 및 관련 변수/함수의 이름에 따라 크게 달라집니다.

이 기능을 사용할 수 있는 또 다른 예는 다음과 같습니다.if..else특정 범위의 값을 확인하기 위한 명령문 및 특정 범위에 대해 아무 일도 일어나지 않아야 한다는 것을 코드에 기록하려고 합니다.

if (a < 0) {
    process_negative(a);
} else if (a >=0 && a < 10) {
    process_under_10(a);
} else if (a >=10 && a < 20) {
    ;   // do nothing
} else if (a >=20 && a < 30) {
    process_20s(a);
} else if (a >= 30) {
    process_30s_and_up(a);
}

빈우경인 if독자들은 그곳에서 무슨 일이 일어났어야 했는지 궁금해할 것이고 개발자는 그것을 잊어버렸을 것입니다. 빈항을포를 으로써.if그것은 독자에게 "네, 저는 이것을 설명했고 이 경우에는 아무 일도 일어나지 않아야 합니다"라고 말합니다.

특정 코딩 표준에서는 모든 가능한 결과를 코드로 명시적으로 설명해야 합니다.따라서 이러한 표준을 준수하는 코드는 다음과 같이 보일 수 있습니다.

그것은 null 문이라고 불립니다.

6.8.3 식 및 null 문에서:

null 문(세미콜론으로만 구성됨)은 작업을 수행하지 않습니다.

이 특정 예제에서는if(a==1){;}그것은 (아마도 조금 더 명백한 것을 제외하고) 유용한 것은 아무것도 하지 않습니다.if(a==1){}또는if(a==1);.

전혀 목적이 없습니다.빈말니 다개무하고싶했있가다습니능이성을어발언를가자가입▁wanted▁if▁it▁to있▁something'. 개발자가 뭔가를 하고 싶었을 .a그렇지 않았습니다.1그 경우 코드는 다음과 같은 것이 될 것입니다(비록.; :: 은 다음과 같습니다.

if(a==1)
{
  ;
}
else
{
  //useful code...
}

하지만 그 경우에는 쉽게 다음과 같이 기록될 수 있었습니다.if(a != 1).


이 C아직 하지 않음)이면, "C++"(태그가 명확하지 않음)로 표시될 .operator==a과부하가 걸렸고 일부 부작용이 관찰될 수 있었습니다.하지만 그것은 코드가 미쳤다는 것을 의미합니다.

이를 null 문이라고 합니다.표현이 빠진 표현문의 일종입니다.

때로는 if 조건을 부정(또는 if 조건이 더 명확한 경우)보다 쉽게 작성할 수 있을 때 보여준 것처럼 if-else 문에서 사용되기도 하지만, if 조건이 false로 평가될 때 코드를 실행해야 합니다.

예를들면

if ( some_condition )
{
   ; // do nothing
}
else
{
   // here there is some code
} 

일반적으로 null 문은 함수의 본문, 클래스 생성자 또는 for 루프가 비어 있음을 나타내는 데만 사용됩니다.예를들면

struct A
{
    A( int x ) : x( x )
    {
        ;
    }

    //...
};

또는

char * copy_string( char *dsn, const char *src )
{
    char *p = dsn;

    while ( ( *dsn++ = *src++ ) ) ;
                                 ^^^
    return p;
}

여기서 null 문은 while 루프에 대해 필요합니다.다음과 같이 다시 작성할 수도 있습니다.

    while ( ( *dsn++ = *src++ ) ) {}

경우에 따라 null 문이 필요할 수 있습니다. 특히 go to 문이 사용되는 드문 경우입니다.예를 들어 C 선언은 문이 아닙니다.선언 전에 프로그램 제어를 전달하려면 선언 전에 레이블을 지정할 수 있습니다.그러나 C에서는 문 앞에만 레이블을 배치할 수 있습니다.이 경우 선언 앞에 레이블이 있는 null 문을 배치할 수 있습니다.예를들면

Repeat:;
      ^^^
    int a[n];

    //....

    n++;
    goto Repeat;

레이블 뒤의 null 문에 주의하십시오.만약 그것을 제거한다면, C 컴파일러는 오류를 발행할 것입니다.

이 트릭은 또한 프로그램 제어를 복합 문 끝으로 전달하는 데 사용됩니다.예를들면

{
   // some code
    goto Done;
   //...

   Done:;
}

Go to 문을 사용해서는 안 되지만 이러한 경우에 대해 알아야 합니다.:)

많은 사람들이 말했듯이 - 그것은 아무것도 하지 않습니다.

그게 왜 거기 있지?여기 가능성이 있습니다 …

함수의 반환 값을 확인하지 않는 팀의 불량 코더에 진저리가 납니다.

에, 는 그서래, 우가리 GCC컴로리서나, 덧다니입붙에때를 추가합니다.__attribute__((warn_unused_result))내가 입력한 모든 함수의 선언으로.MS VC에 해당하는 항목은 이 질문도 참조하십시오.

사용자가 반환 값을 확인하지 않으면 컴파일러는 경고를 생성합니다.

카우보이들은 물론, 시스템과 코드를 조작했습니다.if (foo() != SUCCESS) ;컴파일러를 만족시키는 것입니다(비록 나를 만족시키지는 못하지만).

;아무것도 하지 않는 null 문입니다.종종 다음과 같은 긴 체인에 사용됩니다.

if (a == 1) {
    // Do nothing.
    ;
}
else if (...) {
    ...
}
else if (...) {
    ...
}

이는 다음과 같이 기록될 수도 있습니다.

if (a != 1) {
    if (...) {
        ...
    }
    else if (...) {
        ...
    }
}

후자는 다른 수준의 들여쓰기를 추가하지만 IMO, 더 명확합니다.그러나 null 문은 코드가 없는 여러 분기가 있는 경우 과도한 들여쓰기를 방지하는 데 유용할 수 있습니다.

빈 복합 문(블록이라고도 함)은 다음과 같은 효과를 갖습니다.

if (a == 1) {}

기술적으로 다음 식 문을 직접 사용하려는 경우에만 세미콜론이 필요합니다.

if (a == 1) ;
else if (...) { ... }
else if (...) { ... }

쓰기 ㅠㅠㅠㅠㅠㅠ{;}중복적이고 의심스러운 예시적인 목적을 제공할 뿐입니다.

C 표준의 또 다른 예는 null 문을 사용하여 빈 루프 본문을 제공하는 것입니다.

char *s;
/* ... */
while (*s++ != '\0')
    ;

하지만 여기서는 빈 복합 진술도 선호합니다.

; 자체가 빈 문입니다.한다면a초기화된 비선택적 유형입니다. 그러면

if(a==1){;}

C에서는 항상 작동하지 않습니다.교정기를 사용하면 오타가 없다는 주장에 무게가 더 실립니다.아마도 있을 것입니다.else그 바로 아래에, 만약 그렇다면 실행될 것입니다.a1이 아니었습니다.

기본적으로 null/빈 문이며, 아무 도 하지 않으며, 예상대로 양성(오류 없음)입니다.

C 규격 초안 N1570은 다음을 명확히 합니다.

  1. 식은 선택적입니다. expression[opt];
  2. null 문(세미콜론으로만 구성됨)은 작업을 수행하지 않습니다.

의 C인 Bjarne 그 C++에서 합니다.#9.2 Statement Summary:

세미콜론은 그 자체로 빈 문입니다.

이 두 코드는 코는드두입니다.if(1) {;}그리고.if(1) {}생성된 gcc 명령어와 차이가 없습니다.

왜 그러십니까?저는 디버깅할 때 항상 비슷한 작업을 수행하여 최적화되지 않는 것을 제공하므로 중단점을 둘 수 있습니다.

일반적으로 디버그 마크임을 분명히 말하지만,

if( (a==1) && (b==2) && (c==3) && (d==4) ){

  int debug=1;

}

그렇지 않으면 저도 이해할 수 없는 이상한 코드 조각들이 여기저기 박혀 버리게 됩니다.

하지만 그것이 이것이 무엇이었는지 보장하지 않습니다.

빈 문 noop입니다.

그것의 목적은 무엇입니까?

때때로 우리는 이 경우와 같은 것들을 a와 1의 동일성과 비교하고 싶을 뿐입니다.정수와 같은 원시 유형의 경우, 이것은 상황 레지스터를 설정하므로 if(a > 1) 또는 if(a < 1)와 같은 것이 있고 그 사이에 a가 변경되지 않으면 컴파일러 결정에 따라 다시 평가되지 않을 수 있습니다.

이 코드

 int f(int a){
        if(a == 1){;}
        if(a > 1){return 3;}
        if(a < 1){return 5;}

        return 0;
 }

줄 것입니다

.file   "c_rcrYxj"
.text
.p2align 2,,3
.globl  f
.type   f, @function
f:
.LFB0:
    .cfi_startproc
    cmpl    $1, 4(%esp)
    jle .L6
    movl    $3, %eax
    ret
    .p2align 2,,3
.L6:
    setne   %al
    movzbl  %al, %eax
    leal    (%eax,%eax,4), %eax
    ret
    .cfi_endproc
 .LFE0:
.size   f, .-f
.ident  "GCC: (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4"
.section    .note.GNU-stack,"",@progbits

비교는 cmpl $1, 4(%) 한 번만 수행되며, 정확히 if(a==1)가 기록된 위치입니다.

세미콜론이 빈 문임을 이미 알고 있을 것입니다."이 세미콜론은 어떤 목적을 위해 봉사하는가"라는 실제 질문과 관련하여, 대답은 (이 코드의 작성자가 이상한 이모티콘으로 코드를 활성화하고 싶어하지 않는 한) 전혀 목적을 달성하지 못한다는 것입니다.그것은,{;}와 완전히 동등합니다.{}어떤 맥락에서든 (성명이 예상되는 곳에서, 나는 그것이 유일한 곳이라고 생각합니다.{;} .세미콜론이 존재하면 구성 문이 0인 복합 문이 빈 구성 문 1개인 복합 문으로 변경되지만 의미론에 관한 한 두 경우는 동일합니다.

를 읽는 에 대한 에 대해서 적 인 의 덧 견 우 대 코 대 는 것 간 서 않 해 지 되 에 는 과 우 면 가 인 자 독 연 히 의 려 해 이 붙 성 을 한{;} 라니름보다 나을 것이 .{}(만약 그렇다면, 아마도.{;;;;;;;;}다 둘 다 외톨이보다는 낫습니다.;으로 허용하지 더 잘 입니다.);에 빈 문으로 대체할 수 있습니다.{}항상 유리합니다).

언급URL : https://stackoverflow.com/questions/41592982/what-does-just-inside-an-if-block-mean

반응형