2010-08-02 2 views
1

Stephen G Kochan의 저서 "Programming in c"에서이 코드를 발견했습니다. 이것이 가능한가?함수 C에서의 프로그래밍, Stephen Kochan의 질문문 인수 질문

float absolute_value(x) 
float x; 
{ 
    ----- 
    ----- 
} 

자, 보시다시피, 인수 x는 메소드 인수를 사용하면 선언됩니다. 이로 인해 G ++에서 명백한 컴파일 오류가 발생합니다.

그래서 어떤 C 컴파일러가 이것을 지원합니까?

답변

3

이전 스타일 K & R 형식입니다. 실제로는 인수를 x으로 선언하지 않고 유형을 정의합니다. 달리 지정하지 않는 한 기본적으로 내용은 int입니다.

위로 C 언어가 훨씬 단순한 언어이고, 내가 사랑하는 BCPL에서 멀리 떨어져있는 것이 아니라면, 이것은 함수 인수에 자신의 유형을 부여한 방법입니다. 당신이 젊은 whippersnappers가 당연시하는이 프로토 타입 물건의 어느 것도.

오, 그래

, 내 잔디를 하차 :-)

+0

즉 오래된 책이 있다는 의미입니다. – zengr

+0

예, 실제로 사용합니다. 심지어 K & R 자체 (화이트 성경)는 1990 년에 올바른 함수 프로토 타입을 사용하도록 업데이트되었습니다. 그리고 나는 옛 사람이라고 불리는 것에 신경 쓰지 않습니다. 노년기와 배신자는 젊음과 기술을 상당히 많이 능가합니다 :-) – paxdiablo

+0

나는 Sire에 동의합니다. – zengr

1

이 모든 제대로 작동 C 컴파일러는 그것을 받아 들일 필요합니다 C에서 함수 매개 변수의 유형을 선언하는 원래의 방법입니다. 그러나 C++에서는 사용할 수 없으므로 올바르게 작동하는 모든 C++ 컴파일러는이를 거부해야합니다 (두 경우 모두 적절한 기능을 수행하려면 컴파일러 플래그의 특정 조합이 필요할 수도 있음). 옛날 옛적에 C 컴파일러 이 스타일을 받아 들였고 코드는 다음과 같이 거부합니다 : float absolute_value(float x) {}. 이것은 C가 표준화되는 동안 (함수 프로토 타입과 함께) 추가되었습니다.

+0

C99에서는 허용되지 않습니다. – dan04

+0

@ dan04 : 그렇지 않습니다. §6.11.7에 따르면 "구식 기능"이지만 여전히 허용됩니다 (§6.9.1/7) : "함수 정의의 선언자는 정의되는 함수의 이름과 해당 매개 변수의 식별자를 지정합니다 선언자가 매개 변수 유형 목록을 포함하는 경우 목록은 모든 매개 변수의 유형도 지정합니다 [...] " –