2014-05-18 2 views
3

이 나는 ​​다음과 같은 썼다 0.4/1 :에서 종료 함수 선언기본 값은 "passing_parametr"*는

또는 ( 공급하는 경우) 함수 정의 (8.4)의 선언자 제외한 모든 함수 선언자에서, 변수 이름이 함수 원형 범위 끝가장 가까운 함수 선언자의.

함수 선언자 둘러싸 가까운 끝 선언 포인트 int x 직후, }이다. 왜 작동하지 않는 걸까요?

+0

유일 INT foo는 (CONST의 INT (X) 및, INT Y = 2 * X)' –

+0

@ 같은 오류가 발생 πάνταῥεῖ.'이다 –

+0

나는 너무 두려워 : -/... –

답변

5

이 때문이 아니라 범위이다. 8.3.6/7에 의하면

로컬 변수는 기본 인수에 사용되지 않습니다.

8.3.6/9 :

기본 인수는 함수가 호출 될 때마다 평가됩니다. 함수 인수의 평가 순서는 지정되지 않습니다. 따라서 함수의 매개 변수는 평가되지 않더라도 기본 매개 변수 인 에서 사용되지 않습니다. 기본 인수 앞에 선언 된 함수의 매개 변수는 범위에 있으며 네임 스페이스 및 클래스 멤버 이름을 숨길 수 있습니다.

함수 인수의 평가 순서가 지정되지 않았으므로 이것을 금지하는 것이 좋습니다. 2*xx의 인수 전에 평가 될 경우 y의 값은 어떤 것입니까? 당신이 2 PARAM 작동한다 이런 식으로 복용을 작성한 경우

+0

이렇게 많은 뉘앙스가 .... –

+0

기본 값은 함수의 매개 변수 이외의 유효한 표현식이 될 수 있습니까? –

+0

는 St.Antario @ 예, 이상한 모든 종류의 것들을 할 수 있습니다 : 예.] (http://coliru.stacked-crooked.com/a/75d058835ada69c1) – jrok

0

당신은 기능을 foo는 하나 개 인수를 보내는 :

int foo(int x) 
{ 
    int y=2*x; 
    return y; 
} 

int main() 
{ 
    printf("%d\n",foo(5)); 
} 
+0

당신은 나를 이해하지 못합니다. 저는 공식 언어 규칙을 찾았습니다. –

+2

C++은 인수의 기본값을 지원합니다. 묻는 사람이 원하는 방식이 아닙니다. – Mat

1

합니까 당신을 위해이 코드를 사용할 수 있습니까? 나 같은 작업 생각할 수

#include <stdio.h> 

int foo(int x, int y) 
{ 
    return y; 
} 

int foo(int x) 
{ 
    return foo(x, x*2); 
} 

int main() 
{ 
    printf("%d\n",foo(5)); 
} 
관련 문제