C++ 또는 C에서 foo(void)와 foo() 사이에 차이가 있습니까?
다음 두 가지 함수의 정의를 고려합니다.
void foo() { }
void foo(void) { }
이 둘 사이에 어떤 차이가 있나요?그렇지 않은 경우,void
논쟁은?미적 이유?
C:
void foo()
"함수"를 의미합니다.foo
지정되지 않은 유형의 인수를 여러 개 사용"void foo(void)
"함수"를 의미합니다.foo
논쟁 따윈 필요 없어"
C++의 경우:
void foo()
"함수"를 의미합니다.foo
논쟁 따윈 필요 없어"void foo(void)
"함수"를 의미합니다.foo
논쟁 따윈 필요 없어"
서면으로foo(void)
따라서, 우리는 두 언어 모두에서 동일한 해석을 달성하고 우리의 헤더를 다국어로 만듭니다(비록 우리는 헤더를 진정으로 크로스 언어로 만들기 위해 헤더에 대해 몇 가지 더 많은 작업을 수행해야 합니다.즉, 헤더를 하나의 언어로 묶습니다).extern "C"
C++)를 컴파일 하는 경우).
당신의 질문이 C++와 관련된 것은 알지만, C에 관한 답은 K&R(72-73페이지)에서 찾을 수 있습니다.
또한 함수 선언에 인수가 포함되지 않은 경우(예:
double atof();
또한 atof 인수에 대해 아무것도 가정할 수 없음을 의미하는 것으로 간주됩니다. 모든 파라미터 체크가 꺼집니다.빈 인수 목록의 이 특별한 의미는 오래된 C 프로그램을 새로운 컴파일러로 컴파일할 수 있도록 하기 위한 것입니다.하지만 새 프로그램과 함께 사용하는 것은 좋지 않습니다.함수가 인수를 사용하는 경우 인수를 선언하고 인수를 사용하지 않는 경우 void를 사용합니다.
C에서는 빈 함수 참조에 void를 사용하여 컴파일러에 프로토타입이 있고 그 프로토타입에는 "인수 없음"이 있습니다.C++에서는 시제품을 빼놓을 수 없기 때문에 시제품을 가지고 있다고 컴파일러에 알릴 필요가 없습니다.
C++11 N3337 표준 드래프트
차이가 없다.
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf
부록 C "호환성" C.1.7 조항 8: 선언자는 다음과 같이 말한다.
8.3.5 변경:C + + 에서는 빈 파라미터 목록으로 선언된 함수는 인수를 받지 않습니다.C에서 빈 파라미터 목록은 함수 인수의 수와 유형을 알 수 없음을 의미합니다.
예:
int f(); // means int f(void) in C ++ // int f( unknown ) in C
근거:이는 잘못된 함수 호출(즉, 잘못된 수 또는 인수 유형을 가진 함수 호출)을 방지하기 위한 것입니다.
원래 기능에 미치는 영향:잘 정의된 기능의 의미론으로 변경합니다.이 기능은 C에서 "Obspircent"로 마크되어 있습니다.
8.5.3 함수는 다음을 나타냅니다.
4. parameter-declaration-clause는 함수를 호출할 때 지정할 수 있는 인수와 그 처리를 결정합니다.[...] parameter-declaration-clause가 비어 있으면 함수는 인수를 받지 않습니다.파라미터 리스트(void)는 빈 파라미터 리스트와 동일합니다.
C99
와 같이 C++11은int f()
인수에 대해 아무것도 지정하지 않고 사춘기입니다.
작업 코드 또는 UB로 이어질 수 있습니다.
C99 표준에 대한 자세한 내용은 https://stackoverflow.com/a/36292431/895245에서 설명합니다.
언급URL : https://stackoverflow.com/questions/51032/is-there-a-difference-between-foovoid-and-foo-in-c-or-c
'programing' 카테고리의 다른 글
C에서 "미사용 파라미터" 경고를 억제하려면 어떻게 해야 합니까? (0) | 2022.08.18 |
---|---|
(왜) 초기화되지 않은 변수를 사용하는 것은 정의되지 않은 동작입니까? (0) | 2022.08.18 |
double-c-language에서 절대값을 얻는 방법 (0) | 2022.08.18 |
vue2에서의 서비스JS - 생성된 후크 오류 (0) | 2022.08.18 |
SFTP를 통해 서버에서 파일을 가져오려면 어떻게 해야 합니까? (0) | 2022.08.13 |