C의 반환 값을 둘러싼 괄호
ANSI C 코드에서는 단일 반환값을 둘러싼 괄호를 자주 볼 수 있습니다.
다음과 같이:-
int foo(int x) {
if (x)
return (-1);
else
return (0);
}
이러한 경우 반환값 주위에()을 사용하는 이유는 무엇입니까?좋은 생각 있어요?나는 그것에 대한 이유를 모르겠다.
원래 C 사양에서는 반환값 주위에 괄호가 필요했습니다.최신 C 컴파일러 및 ANSI C 규격은 이러한 컴파일러를 필요로 하지 않지만 괄호가 있어도 반환값에 영향을 주지 않으며 프로그래머는 표준이 익숙하지 않거나 표준이 필요한 스타일 규칙과의 정합성이 유지되거나 하위 호환성을 위해 이러한 컴파일러를 포함할 수 있습니다.
C++를 생각하고 있는 분들을 위해 덧붙입니다.이 질문은 C와 C는 C++가 아니라 서로 다른 표준, 능력, 난이도 및 서로 다른 사용 방식을 가진 두 개의 다른 언어입니다. 이 두 언어가 공통되는 것이 무엇이든지 간에 완전히 다른 것으로 취급하는 것이 현명합니다.C++에 관한 유사한 질문은 반환문에서 결과 주위의 괄호가 중요한가?를 참조하십시오.
실제적이지만 그럴 것 같지 않은 동기는 값 주위에 괄호를 둘 경우 반환을 매크로로 정의하고 로그 코드를 삽입하여 모든 반환을 확인할 수 있습니다.
이유는 없어요 그냥 오래된 관습일 뿐이죠
공간을 절약하기 위해 프로그래머는 종종 자신의 행이 아닌 리턴 행에서 최종 계산을 수행하곤 하며, 패런은 다음과 같이 반환되는 단일 문장이라는 것을 알기 쉽게 하기 위해 대부분 거기에 있습니다.
return (x+i*2);
대신
int y = x+i*2;
return y;
괄호가 습관이 되어 붙었다.
제 개인 스타일은 복잡한 표현이 있을 경우 괄호를 사용하는 것입니다.
return (a + b);
간단한 용어일 경우 사용하지 않는 것
return a;
내가 왜 그런 식으로 하는지 말할 수 없다. 단지 오래 전에 알게 된 것일 뿐이다.
덧붙여서 함수 호출처럼 보이게 하는 것은 다음과 같습니다.
return(a); // ugh
엄청나게 못생겼는데 그냥 틀렸어
아마도 그것은 커스텀일 것입니다.어쨌든 Unix와 C를 가져온 사람들은 Multics 프로젝트에서 왔습니다.멀티픽은 PL/I로 작성되었으며 PL/I에서는 괄호가 필수입니다.
몇 가지 이유가 있습니다.
if/while/for/etc.는 모두 paren을 포함해야 하는 제어 키워드입니다.그래서 항상 반품하는 것도 당연해 보입니다.
sizeof는 paren을 사용해야 하는 경우를 제외하고 둘 중 하나를 가질 수 있는 유일한 키워드입니다.그래서 항상 패런을 사용하는 습관을 들이는 것이 더 쉽다.sizeof는 가능한 경우 항상 실행한다는 논리를 의미합니다.
case/goto는 parens를 사용하지 않는 유일한 키워드입니다.사람들은 그것들을 특별한 케이스로 생각하는 경향이 있습니다(또한 둘 다 다른 컨트롤 키워드, 특히 goto에서 두드러지는 것을 좋아합니다).
에 괄호를 을 알 수 .C/C++
구문을 사용합니다.이치노하지만 모든 것을 곱슬곱슬하게 묶는 것만큼 나쁘지는 않다.
int foo(int x) {
if (x) {
return (-1);
}
else {
return (0);
}
}
많은 프로그래머들이 이렇게 해요.여러분 중 한 분이 이걸 읽으시면, 아마 설명해주실 겁니다.
예시와 같이 -1을 반환할 때, 마이너스 부분이 더 잘 보이기 때문에 괄호가 더 읽기 쉽다고 생각합니다.
return 1
또는
return -1
또는
return (-1)
반환문의 괄호는 이 값을 메모리가 아닌 스택으로 반환하는 것을 컴파일러에 나타냅니다.
옛날에는 (일반적으로) 엄격하게 적용되었지만 오늘날에는 대부분의 컴파일러가 힌트로 받아들이고 있습니다.
이것은, 에러에 의해서 메모리 참조를 개입시켜 반환되는 모든 것이 파손될 가능성이 있기 때문에, 자주 실시하고 있습니다만, 통상은 스택상에서 반환되는 변수에는 영향을 주지 않습니다.
또한 과도 변수에 스택을 사용하면 메모리 사용량이 줄어들고 일반적으로 스택이 임시 데이터/변수를 위해 설계되었기 때문에 함수 호출/반환 시간이 단축됩니다.
저는 적어도 한 명의 프로그래머와 일한 적이 있는데, 그는 리턴이 일종의 특별한 함수 호출이라고 생각했고, 그가 제 코드가 패런 없이 준수되는 것을 보고 놀랐습니다.
괄호를 사용할 때는 읽기 쉽도록 되어 있다고 생각합니다(예를 들어, Ruby는 인수를 둘러싸는 메서드 호출을 지원하지만 최근의 서적이나 기사는 그렇지 않다고 조언합니다).
언급URL : https://stackoverflow.com/questions/161879/parenthesis-surrounding-return-values-in-c
'source' 카테고리의 다른 글
Redux 애플리케이션에서 코드 분할을 위한 부하 감소기를 동적으로 로드하는 방법은 무엇입니까? (0) | 2022.12.18 |
---|---|
스크래피 키 오류: z (freebsd) (0) | 2022.12.18 |
MariaDB는 윈도우에서 lower_case_table_names=0을 지원합니까? (0) | 2022.12.18 |
MySQL 스토어드 프로시저 vs 함수, 어떤 경우에 사용합니까? (0) | 2022.12.18 |
연결을 일찍 닫으려면 어떻게 해야 합니까? (0) | 2022.12.18 |