이 나는 다음과 같은 썼다 0.4/1 :에서 종료 함수 선언기본 값은 "passing_parametr"*는
또는 ( 공급하는 경우) 함수 정의 (8.4)의 선언자 제외한 모든 함수 선언자에서, 변수 이름이 함수 원형 범위 끝가장 가까운 함수 선언자의.
함수 선언자 둘러싸 가까운 끝 선언 포인트 int x
직후, }
이다. 왜 작동하지 않는 걸까요?
이 나는 다음과 같은 썼다 0.4/1 :에서 종료 함수 선언기본 값은 "passing_parametr"*는
또는 ( 공급하는 경우) 함수 정의 (8.4)의 선언자 제외한 모든 함수 선언자에서, 변수 이름이 함수 원형 범위 끝가장 가까운 함수 선언자의.
함수 선언자 둘러싸 가까운 끝 선언 포인트 int x
직후, }
이다. 왜 작동하지 않는 걸까요?
이 때문이 아니라 범위이다. 8.3.6/7
에 의하면
로컬 변수는 기본 인수에 사용되지 않습니다.
및 8.3.6/9
:
기본 인수는 함수가 호출 될 때마다 평가됩니다. 함수 인수의 평가 순서는 지정되지 않습니다. 따라서 함수의 매개 변수는 평가되지 않더라도 기본 매개 변수 인 에서 사용되지 않습니다. 기본 인수 앞에 선언 된 함수의 매개 변수는 범위에 있으며 네임 스페이스 및 클래스 멤버 이름을 숨길 수 있습니다.
함수 인수의 평가 순서가 지정되지 않았으므로 이것을 금지하는 것이 좋습니다. 2*x
이 x
의 인수 전에 평가 될 경우 y
의 값은 어떤 것입니까? 당신이 2 PARAM 작동한다 이런 식으로 복용을 작성한 경우
이렇게 많은 뉘앙스가 .... –
기본 값은 함수의 매개 변수 이외의 유효한 표현식이 될 수 있습니까? –
는 St.Antario @ 예, 이상한 모든 종류의 것들을 할 수 있습니다 : 예.] (http://coliru.stacked-crooked.com/a/75d058835ada69c1) – jrok
당신은 기능을 foo는 하나 개 인수를 보내는 :
int foo(int x)
{
int y=2*x;
return y;
}
int main()
{
printf("%d\n",foo(5));
}
당신은 나를 이해하지 못합니다. 저는 공식 언어 규칙을 찾았습니다. –
C++은 인수의 기본값을 지원합니다. 묻는 사람이 원하는 방식이 아닙니다. – Mat
합니까 당신을 위해이 코드를 사용할 수 있습니까? 나 같은 작업 생각할 수
#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));
}
유일 INT foo는 (CONST의 INT (X) 및, INT Y = 2 * X)' –
@ 같은 오류가 발생 πάνταῥεῖ.'이다 –
나는 너무 두려워 : -/... –