C
키보드로 EOF값 입력 방법
TCPL의 예제 1-6을 풀던 중 EOF(End of file)를 입력해야 하는 상황이 생겼습니다. 키보드로 EOF를 입력해야 할 때는 Ctrl+D를 누르면 되는 것을 확인하였습니다. 참고로, 리눅스 환경에서 확인하였습니다. 윈도나 맥에서도 똑같이 동작하는지는 확인하지 않았습니다.
[다시 C언어] 함수 반환형, 안적어도 될까?
Keringhan의 "The C Programming Language"에 실려있는 예시 코드들을 보면 main 함수 반환형이 적혀있지 않은 것을 발견하였습니다. 아래 처럼요. main() { ... } 평소 같았으면 저자가 코드를 빠트렸나보다 생각했었을 것입니다. 그러나 내용을 충분히 곱씹으며 봐야 한다는 keringhan의 책이어서 혹시나 하는 마음으로 책 내용과 똑같이 반환형 없이 코드를 작성하고 빌드해 보았습니다. 결과는 아래와 같은 경고 문구가 출력되었습니다. Ex_01-03.c:3:1: warning: return type defaults to ‘int’ [-Wimplicit-int] 3 | main() | ^~~~ 그렇습니다. 이것은 경고(warning)이지 오류(error)가 아닙니다. 따라..
[다시 C언어] 시작하며.
왜 다시 C언어를 공부할까? RTOS를 만들어보는 공부를 시작하면서 잘 모르던 C언어 문법을 만나게 된 것이 계기입니다. 구조체를 이용한 비트 필드 표현이나 가변 인자 함수가 있다는 것을 알게 된 것도 최근 일이지요. 저는 C언어를 그래도 좀 안다고 생각했는데 너무 얕게 알고 있었던 모양입니다. 그래도 개발을 하면서 밥을 벌어 먹고사는 사람이 자신의 주력 언어는 자신 있게 '잘 안다'고 말할 수 있어야 하지 않을까 생각했습니다. 그래서 다시 C언어를 공부하기 시작했습니다. 무슨 책을 참고하지? 제가 처음 C언어를 접하게 된 것은 2013년 대학원 생활을 시작하면서였습니다. 예술과 공학을 융합한 학과에서 '비전공자' 신분으로 개발 공부를 시작하였지요. 그때는 많은 C언어 입문 ..
C언어에서 가변 인자 함수를 만들려면?
C언어에서 그게 되는거였어? 최근에 알게 된 사실인데 C언어도 가변 인자 함수를 사용할 수 있습니다. 가변 인자 함수가 무엇이냐 하면 함수의 인자(인수) 개수가 고정되어있지 않은 것을 말합니다. C언어라고 하면 오래된 만큼 조금 고리타분하다는 인상을 받고 있었습니다. 그래서 그렇게 유연한 기능이 있다는 것을 생각지도 않고 있었지요. 그런데 가만히 생각해보면 평소에 가변 인자 함수를 아주 흔하게 사용하고 있었습니다. 바로 printf()함수이지요. 첫 번째 인자에 출력하고자 하는 문자열 형식(template)이 들어가고 그 이후부터는 앞서 정한 형식에 들어가는 변수들을 나열하지요. 문자열 형식을 어떻게 작성했느냐에 따라 뒤따라오는 인자가 0개가 될 수도 있고 2개, 3개, 10개도 될 수 있습니다. 가변 ..
구조체 내부 변수 뒤 이것 ':'의 정체, '비트 필드'
변수명 뒤에 붙은 이것 ':', 뭐지? 구조체에 포함된 변수명 뒤에 콜론 기호(:)가 붙은 코드를 보게 되었습니다. 여태 본적이 없는 코드라 저것의 정체가 무엇인지 알아보았고, 그 내용을 간단히 정리하였습니다. typedef union UARTDR_t { uint32_t all; struct { uint32_t DATA:8; // 7:0 uint32_t FE:1; // 8 uint32_t PE:1; // 9 uint32_t BE:1; // 10 uint32_t OE:1; // 11 uint32_t reserved:20; } bits; } UARTDR_t; 정답은 비트 필드! 구조체 멤버 변수 뒤에 사용되는 콜론 기호(:)는 비트 필드를 구현할 때 사용하는 것입니다. 레지스터값에 직접 접근하..