블록 안에 있는 ";"는 무엇을 의미합니까?
누가 이걸 왜 쓰겠어요?
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 문이라고 불립니다.
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
그 바로 아래에, 만약 그렇다면 실행될 것입니다.a
1이 아니었습니다.
기본적으로 null/빈 문이며, 아무 것도 하지 않으며, 예상대로 양성(오류 없음)입니다.
C 규격 초안 N1570은 다음을 명확히 합니다.
- 식은 선택적입니다. expression[opt];
- 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
'programing' 카테고리의 다른 글
jQuery를 사용하여 ASP.NET 웹 서비스를 호출하는 방법은 무엇입니까? (0) | 2023.06.28 |
---|---|
이동 평균 계산 (0) | 2023.06.28 |
Oracle 모든 외부 키 참조 (0) | 2023.06.28 |
페이지 새로 고침 시 Quasar 탭 패널의 현재 탭을 유지하는 방법 (0) | 2023.06.23 |
Firebase App '[DEFAULT]'이 생성되지 않았습니다. Firebase를 호출합니다.Float 및 Firebase에서 App() 초기화 (0) | 2023.06.23 |