C 코드 블록은 왜 곱슬 괄호로 묶습니까?
C코드를 보고 있는데 컨트롤 구조가 없는 코드 블록을 둘러싼 이 곱슬곱슬한 중괄호로 가득 차 있습니다.다음 항목을 참조하십시오.
//do some stuff . . .
fprintf(stderr, "%.2f sec\n", (float)(clock() - t) / CLOCKS_PER_SEC);
{
//a block! why not?
char *tmp_argv[3];
tmp_argv[0] = argv[0]; tmp_argv[1] = str; tmp_argv[2] = prefix;
t = clock();
fprintf(stderr, "[bwa_index] Convert nucleotide PAC to color PAC... ");
bwa_pac2cspac(3, tmp_argv);
fprintf(stderr, "%.2f sec\n", (float)(clock() - t) / CLOCKS_PER_SEC);
}
왜 코드에 이런 블록을 삽입하는 거죠?그것들로 가득 차 있다.퍼포먼스 혜택 같은 게 있나요?신비로운 C? 왜?
편집: BWA의 경우 이 코드는 Burrows-Wheeler 변환을 사용하여 작은 시퀀스를 큰 참조 시퀀스로 정렬하는 바이오 인포매틱스 프로그램입니다.이 코드 예는 응용 프로그램의 기능과 특별히 관련이 없습니다.
선언을 수행하려면 레거시 코드 { }이(가) 필요함
C89에서는 그냥 할 수 없었습니다.int i;
선언은 블록의 선두에서만 유효합니다.
그래서:
a = 1;
int i; /* error */
i = 2;
...유효한 것은 아니지만,
a = 1
if (e) {
int i;
...괜찮았어요, 평범한 블록처럼요.
결과적으로 선언이 유효해진 후에도(C99) 블록 항목이 부분적으로 관성에 의해, 부분적으로 역방향 이동성을 위해, 그리고 새로운 선언의 범위를 설정하는 것이 타당하기 때문에 계속되었다.
최근에 발견한 또 다른 사용 사례는 오픈/클로즈 시멘틱스를 사용하여 '내부' 코드를 명확하게 표시하려는 경우입니다.
f = fopen('file');
{
// do stuff
}
fclose(f);
이 방법은 객체를 닫거나 해제하도록 알려주는 데 효과적이며, 이 코드를 보다 명확하게 만듭니다.
변수의 범위를 지정합니다.예: 변수tmp_argv
는 괄호 사이에만 유효합니다.
블록 내에서 선언하는 변수는 해당 블록에 대해 로컬입니다.이 방법을 통해 새로운 정의를 변경할 수 있습니다.tmp_argv
이 코드 조각과 충돌하지 않고 코드의 다른 위치(예: 코드)에서 사용할 수 있습니다.
스코프를 작성하고 있습니다.스택 개체는 범위를 벗어나면 삭제됩니다.타이핑 같은 걸 하고 있는 것 같아요각 블록이 시간을 재고 싶은 거예요하지만 스코프 타이머 오브젝트는 보이지 않습니다.그래서 말이 안 돼요
블록은 변수의 수명 및 컴파일러에 대한 가시성을 결정하는 범위입니다.따라서 블록 내에서 생성된 변수는 컨트롤이 블록을 벗어나면 사라집니다.
이러한 변수가 생성자와 소멸자가 있는 클래스의 인스턴스일 경우 매우 편리할 수 있습니다.
그러나 이 예에서는 큰 이점이 없습니다.
흠 - 여기서 벗어나긴 했지만 블록 내에서 로컬 변수 정의는 블록 밖에서 유효하지 않을 것 같습니다.
★★★★★★★★★★★★★★★★★?예요.tmp_argv
그 이후로는 다른 않는다tmp_argv
{
★★★★★★★★★★★★★★★★★」}
교정기 바깥과는 분리되어 있습니다.
이러한 경우 블록을 사용하는 경우가 있습니다. - 변수를 현지화하기 위해 - 또는 읽기 쉽게 하기 위해...
언급URL : https://stackoverflow.com/questions/1677778/why-enclose-blocks-of-c-code-in-curly-braces
'programing' 카테고리의 다른 글
Vue의 data()와 같은 반응형 변수를 만드는 방법Vue+타입 스크립트 (0) | 2022.09.14 |
---|---|
실행 중인 JVM의 매개 변수 가져오기 (0) | 2022.09.14 |
JavaScript 폐쇄는 어떻게 작동합니까? (0) | 2022.09.14 |
포인트별 MySQL MariaDB 그룹 타임스탬프 (0) | 2022.09.14 |
MySQL은 단일 행에서와 같이 최소 열과 최대 열에 대해 일치하는 행을 가져옵니다. (0) | 2022.09.14 |