반응형
c언어 공부 중인데 개념만 읽어서 이해는 되지만 실제로 해보려고 백준 문제를 풀었다
배열포인터가 너무 어려워서.. 배열포인터는 아니지만 배열 문제로 풀었는데 새로운 난관을 만났다
Visual Studio로 컴파일을 하면 배열을 선언할 때, 배열 크기를 변수로 지정하는 게 안됐다.
java랑 python을 해왔으므로 매우 당황스러움...
찾아보니 C언어 컴파일러 중 C99컴파일러는 배열 크기 선언이 변수로 가능한데 그 이전은 불가능하고,
Visual Studio는 C99컴파일러를 사용하지 않기 때문에 배열크기를 변수로 선언하는 게 오류였던 것!
백준에서는 C99컴파일러를 사용할 수 있어 다음과 같은 코드로 제출이 가능했다.
C99 컴파일러에서는 가변길이배열 VLA(variable-length array)를 채택했기 때문이라고
리눅스 계열에서 사용하는 gcc계열 컴파일러 또한 VLA를 채택했다고 한다.
#include <stdio.h>
int main() {
int N = 0;
int M = 0;
scanf("%d", &N);
scanf("%d", &M);
int temp;
int arr[N][M];
int arr2[N][M];
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
scanf("%d", &temp);
arr[i][j] = temp;
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
scanf("%d", &temp);
arr2[i][j] = temp;
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
printf("%d ", arr[i][j] + arr2[i][j]);
}
printf("\n");
}
return 0;
}
똑같은 for문을 3개나 줄줄이 쓰는게 매우 맘에 안들긴하지만, 언어 공부 중이니 꾹참고 패스..
VLA를 사용하지 않고 Visual Studio 에서도 돌아가는 코드를 작성하고 싶다면 배열크기를 문제에서 주어진 최대길이인 100 x 100 으로 초기화하면 된다.
컴파일러 부분에 대한 자세한 포스팅
반응형
'Programming > C' 카테고리의 다른 글
c언어 공부하기 좋은 사이트 (0) | 2023.03.20 |
---|