반응형
함수 매개변수의 세미콜론
matrix_* matrix_insert_values(int n; double a[][n], int m, int n)
{
matrix_* x = matrix_new(m, n);
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
x->v[i][j] = a[i][j];
return x;
}
검사 행렬 예제
double in[][3] = {
{ 12, -51, 4},
{ 6, 167, -68},
{ -4, 24, -41},
{ -1, 1, 0},
{ 2, 0, 3},
};
길을 좀 잃었어요, 뭐가 뭔지 모르겠어요.int n;
제 주장 선언 안에 있습니다. C 위에서 작동하지만 C++는 이 구현을 허용하지 않습니다.저는 이 코드를 C++로 마이그레이션할 것이기 때문에 이것이 어떻게 작동하는지 알고 싶습니다.
이것은 VLA 선언자에 사용되는 매개 변수를 순방향 선언하는 데 사용되는 C99 GNU 확장(GCC 문서)에서 거의 사용되지 않는 기능입니다.
matrix_* matrix_insert_values(int n; double a[][n], int m, int n);
당신은 어떻게 하는 지 보입니까?int n
두 번이나 나타나나요?첫번째int n;
단지 실제의 선언일 뿐입니다.int n
, 끝에 있는 거죠.앞에 나타나야 합니다.double a[][n]
왜냐면n
의 선언에 사용됩니다.a
. 변수를 다시 조정하는 것이 괜찮으시다면, 당신은 그냥n
전에a
그러면 이 기능은 필요 없을 겁니다
matrix_* matrix_insert_values_rearranged(int m, int n, double a[][n]);
C++ 호환성 참고
분명히 말하면, GNU 확장은 함수 매개 변수의 순방향 선언일 뿐입니다.다음 프로토타입은 표준 C입니다.
// standard C, but invalid C++
matrix_* matrix_insert_values_2(int m, int n, double a[][n]);
이 코드는 C++에서 지원되지 않는 가변 길이 배열을 사용하므로 C++에서 이 함수를 호출할 수 없습니다.C++에서 호출할 수 있으려면 함수를 다시 작성해야 합니다.
C에서 항상 그렇게 부르는 경우(즉, 컴파일 시간에 n과 m이 고정된 경우), C++에서는 다음을 수행할 수 있습니다.
template <int N, int M>
void matrix_insert_values(const double (&a)[M][N]);
int main() {
double in[5][3] = {
{ 12, -51, 4},
{ 6, 167, -68},
{ -4, 24, -41},
{ -1, 1, 0},
{ 2, 0, 3},
};
matrix_insert_values(in);
};
템플릿 매개 변수로 N과 M이 있으며 함수에 전달된 입력에서 컴파일 시간에 자동으로 추론됩니다.
언급URL : https://stackoverflow.com/questions/15145524/semicolon-on-a-function-parameters
반응형
'programing' 카테고리의 다른 글
스위프트에서 NS Exception 포착 (0) | 2023.10.23 |
---|---|
C++로 아두이노를 프로그래밍하는 방법 (0) | 2023.10.23 |
리눅스: sig_atomic_type이 int로 지정되는 이유는 무엇입니까? (0) | 2023.10.23 |
a에서 jQuery Change 이벤트a에서 jQuery Change 이벤트요소 - 이전 값을 유지할 수 있는 방법이 있습니까?요소 - 이전 값을 유지할 수 있는 방법이 있습니까? (0) | 2023.10.23 |
브라우저에 마우스가 없고 터치 전용임을 감지 (0) | 2023.10.23 |