전에도 edX에서 수업을 몇 가지 들었는데, 지나고 나면 기억이 희미해지는 것이 아쉬웠다. 그래서 이번에는 수업 내용을 위키독스에 영어로 배우는 C 프로그래밍이라는 이름으로 정리하고 있다.
이 수업은 PC에 컴파일러를 설치하지 않고 웹 브라우저에서 바로 해볼 수 있다.
포인터 연산 수업을 듣고 객관식 문제를 풀다가 같은 문제를 자꾸 틀려서 코드를 직접 작성해서 테스트해보니 예상과 다르게 나왔다. 혹시나 컴파일러가 달라지면 다르게 작동할까 싶어, 맥북에서 한 번 더 테스트해보았다.
코드:
% cat pointer.c
#include
int main(void) {
int numbers[] = {4, -1, 8, 3, 0, -11};
printf("%d", numbers[10]);
return 0;
}
gcc를 사용하기 위해 명령행 개발자 도구를 설치:
% xcode-select --install
컴파일:
% gcc pointer.c
pointer.c:5:18: warning: array index 10 is past the end of the array (which
contains 6 elements) [-Warray-bounds]
printf("%d", numbers[10]);
^ ~~
pointer.c:4:5: note: array 'numbers' declared here
int numbers[] = {4, -1, 8, 3, 0, -11};
^
1 warning generated.
실행:
% ./a.out
1860979913
실행 결과를 확인하니 아차 싶었다. C 언어를 옛날에도 배웠고 지금도 다시 배우고 있음에도, 특성을 정확히 이해하지 못한 부분을 이 문제가 잘 지적해주었다.
댓글 없음:
댓글 쓰기