programing

매개 변수 전달 선언이란 무엇입니까?

bestprogram 2023. 8. 20. 12:16

매개 변수 전달 선언이란 무엇입니까?

다음 코드를 컴파일하기 전까지는 C 구문을 꽤 잘 안다고 생각했습니다.

void f(int i; double x)
{
}

컴파일러가 작동할 것으로 예상했는데 작동했습니다. 하지만 오류 메시지가 표시되지 않습니다.

test.c:1:14: error: parameter ‘i’ has just a forward declaration

그 다음에 시도했습니다.

void fun(int i; i)
{
}

에 실패한

test.c:1:17: error: expected declaration specifiers or ‘...’ before ‘i’

그리고 마지막으로

void fun(int i; int i)
{
}

놀랍게도, 그것은 성공했습니다!

나는 이 구문을 실제 C 코드에서 본 적이 없습니다.그게 무슨 소용이 있습니까?

함수 정의의 다음과 같은 형식입니다.

void fun(int i; int i)
{
}

에서는 매개 변수 전달 선언 기능이라는 GNU C 확장을 사용합니다.

http://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html

이 기능을 사용하면 실제 매개 변수 목록 앞에 매개 변수 포워드 선언을 사용할 수 있습니다.예를 들어 가변 길이 배열 매개 변수가 있는 함수에서 가변 길이 배열 매개 변수 뒤에 크기 매개 변수를 선언하는 데 사용할 수 있습니다.

예:

// valid, len parameter is used after its declaration 
void foo(int len, char data[len][len]) {}  

// not valid, len parameter is used before its declaration
void foo(char data[len][len], int len) {}

// valid in GNU C, there is a forward declaration of len parameter
// Note: foo is also function with two parameters
void foo(int len; char data[len][len], int len) {}  

OP 예제에서,

void fun(int i; int i) {}

정방향 매개변수 선언은 실제 매개변수와 그 어떤 것에도 사용되지 않기 때문에 어떠한 목적에도 도움이 되지 않습니다.fun함수 정의는 실제로 다음과 같습니다.

void fun(int i) {}

참고로 이것은 GNU C 확장이며 C가 아닙니다.를 사용하여 컴파일gcc그리고.-std=c99 -pedantic예상되는 진단을 제공합니다.

경고: ISO C는 전달 매개 변수 선언을 금지합니다 [-pedicant]

사용하는 컴파일러에 따라 다릅니다.";" 없이 사용하고 ","를 사용합니다.

언급URL : https://stackoverflow.com/questions/17771484/what-is-a-parameter-forward-declaration