programing

반환 값을 둘러싼 괄호

nasanasas 2020. 11. 10. 08:15
반응형

반환 값을 둘러싼 괄호


ANSI C 코드에서 종종 단일 반환 값을 둘러싼 괄호를 볼 수 있습니다.

이렇게 :-

int foo(int x) {
  if (x)
    return (-1);
  else
    return (0);
}

이 경우 반환 값 주위에 ()를 사용하는 이유는 무엇입니까? 어떤 아이디어? 그 이유를 알 수 없습니다.


정말 이유가 없습니다. 단지 오래된 관습입니다.

공간을 절약하기 위해 프로그래머는 종종 자체 라인이 아닌 리턴 라인에서 최종 계산을 수행하고 괄호는 다음과 같이 리턴되는 단일 명령문인지 쉽게 확인할 수 있도록 대부분 거기에 있습니다.

return (x+i*2);

대신에

int y = x+i*2;
return y;

괄호가 버릇이되어 달라 붙었습니다.


실용적이지만 가능성이 낮은 동기는 값을 괄호로 묶고 매크로로 반환을 정의한 다음 일부 로깅 코드를 삽입하여 모든 수익을 볼 수 있다는 것입니다.


내 개인적인 스타일은 복잡한 표현이 있으면 괄호를 사용하는 것입니다. 예 :

return (a + b);

그러나 표현이 단순한 용어라면 사용하지 마십시오.

return a;

내가 왜 그렇게하는지 말할 수 없다. 오래전에 집어 들었던 것뿐입니다.

그건 그렇고, 다음과 같이 함수 호출처럼 보이게한다고 생각합니다.

return(a);  // ugh

엄청나게 추하고 틀 렸습니다.


원래 C 사양에서는 반환 값을 괄호로 묶어야했습니다. 최신 C 컴파일러와 ANSI C 표준에서는이를 필요로하지 않지만 괄호의 존재는 반환 값에 영향을주지 않으며 프로그래머는 표준에 익숙하지 않은 습관을 필요로하는 스타일 규칙과의 일관성을 위해 여전히 표준에 익숙하지 않은 상태로 포함합니다. 또는 이전 버전과의 호환성을 위해 가능합니다.

C ++에 대해 생각하는 사람들을 위해 추가해야합니다. 질문은 C에 관한 것이고 C는 C ++가 아닙니다. 표준, 기능, 난이도 및 사용 유형이 다른 두 가지 언어입니다. 공통점이 무엇이든 완전히 별개의 것으로 취급하는 것이 현명합니다. C ++를 다루는 유사한 질문 은 return 문에서 결과를 괄호로 묶는 것이 중요합니까?를 참조하세요. .


몇 가지 이유가 있습니다.

  1. if / while / for / etc. 괄호가 있어야하는 모든 제어 키워드입니다. 따라서 항상 그들을 반환하는 것이 자연스러워 보입니다.

  2. sizeof는 일부 경우에 괄호 사용해야 한다는 점을 제외하고는이를 가질 수 있거나 가질 수없는 유일한 다른 키워드입니다 . 따라서 항상 괄호를 사용하는 습관을들이는 것이 더 쉽습니다. 의 논리를 의미하는 sizeof의 경우 : 가능하면 항상 수행합니다.

  3. case / goto는 괄호를 사용하지 않는 유일한 키워드입니다. ... 그리고 사람들은 그것들을 특별한 경우로 생각하는 경향이 있습니다 (그리고 두 가지 모두 다른 제어 키워드, 특히 goto에서 눈에 띄는 경우).


예에서와 같이 -1을 반환하면 마이너스가 더 잘 보이기 때문에 괄호로 더 읽기 쉽다고 생각합니다.

return 1

또는

return -1

또는

return (-1)

아마도 그것은 사용자 정의 일 것입니다. 결국 우리에게 Unix와 C를 가져온 사람들은 Multics 프로젝트에서 왔습니다. Multics는 PL / I로 작성되었으며 PL / I에서는 괄호가 필수입니다.


I've worked with at least one programmer who thought return was some special sort of function call, and was suprised when he saw that my code complied without the parens.


As often the case when using parenthesis, I think that's just for readability (e.g., Ruby supports method calls w/o parenthesis enclosing the arguments but recent books and articles advise otherwise).


The Parenthesis in a return statement indicate to the compiler that you intend for this value to be returned on the stack instead of in memory.

In the old days this was rigorously enforced(typically), but today most compilers only take it as a hint.

This is something I do frequently, since an error could corrupt anything being returned via a memory reference, but typically wont effect a variable being returned on the stack.

Using the stack for transient variables also cuts down on memory usage and typically makes the function call/return quicker because that's what the stack is designed for, transient data/variables.


Using parentheses in a return statement shows a deficient grasp of C/C++ syntax. It's as simple as that. But it's not as bad as putting everything in curly braces:

int foo(int x) {
  if (x) {
    return (-1);
  }
  else {
    return (0);
  }
}

So many programmers do this. If one of you reads this, perhaps you might like to explain.

참고URL : https://stackoverflow.com/questions/161879/parenthesis-surrounding-return-values

반응형