programing

C 코드 블록은 왜 곱슬 괄호로 묶습니까?

prostudy 2022. 9. 14. 21:28
반응형

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

반응형