약 5개월 전에, define 전처리문에 대해서 썼습니다. 이번 시간에는 조건부 컴파일을 할 때 많이 써먹는, #if와 #ifdef에 대한 글을 써보도록 하겠습니다. 당연하게도, 백준 사이트에서도 많이 볼 수 있는 코드이기도 합니다. 먼저 위 코드를 보겠습니다. 이상한 va_list라던지 va_start, vprintf, va_end가 나오지만, 여기에서는 중요하지 않습니다. 단지, 가변 인자를 처리하기 위해서 저런 것들을 썼다 정도만 보시면 되고요. 여기서 중요한 것은 13번째 줄의 #ifdef입니다. 이것은 무엇을 하는 것일까요? 위에 보니까 DEBUG라는 것이 정의가 되어 있지 않아요. 아무 결과도 나타나지 않았습니다. 반면에, 이 코드는 위에서 DEBUG라는 필드가 정의되어 있었습니다. 이 경우에..
코딩/C 검색 결과
제목. 왜 10시간동안 아래 코드가 잘못된 동작을 하는 원인을 찾았는가? 제목이 꽤나 성가실 지도 모르겠습니다만, 오늘 몇 시간동안 삽질한 주제였습니다. 자신의 코드는 잘 안 보인다고 하는데, 그 말이 딱 맞았습니다. 심지어 고인물들이 모여 계시는 알고 싯포 톡방에서, const char * 문제인가? 를 가지고도 간접적으로 질문을 했는데, 실험도 해 보고, 이것 저것 팁들을 들어보니, 이것도 답이 아니였습니다. 당연하게도, 제가 완전히 잘못 파악한 것이였습니다. 부들부들 해당 문제를 풀기 위한 코드를 보도록 하겠습니다. 먼저, dp 함수는 아래와 같습니다. for loop를 돌면서, temp에 app(i, x-i)를 수행한 결과물인 string의 c_str()의 주솟값을 넣습니다. 그리고, temp와 ..
오랫만에 글을 씁니다. 이번 시간에는 파일 포인터를 넘겨주면 파일 디스크립터를 돌려주는 fileno 함수를 배워보겠습니다. 사실 빠른 입출력을 위해 많이 쓴다는 fastio의 write를 배우기 위해서, 배운다는 건 비밀이지만요. 이 함수의 원형은 다음과 같습니다. stdio.h에 선언이 되어 있는 함수입니다. FILE 포인터를 넘겨주면, 그것과 연관된 파일 디스크립터를 돌려주는 역할을 합니다. stdio.h에 보시면 bits/types/FILE.h가 보이는데요. 무엇인지 모르겠지만, 저기에 무언가가 있을 듯 싶으니, 타고 들어가 보겠습니다. 그러면, _IO_FILE이라는 것을 FILE로 재정의를 한 무언가가 보이는데요. 글쎄요. 일단, 이것도 타고 들어가 보겠습니다. 그러면 _IO_FILE 구조체가 보..
fopen을 하고 난 뒤에는 fclose를 호출하라고 합니다. 사실, fopen과 fclose는 한 쌍처럼 따라다닌다고 봐도 무난하긴 하겠네요. 만약에, 닫지 않으면 어떤 일이 일어날까요? 저는, 1.txt를 열기만 하고 닫지는 않을 겁니다. fclose.c를 보겠습니다. 1000번 fopen 함수를 수행합니다. 닫는 것을 호출하지 않습니다. 그리고 나서, file open end를 찍고 계속 루프를 돕니다. 이 정도로 해석하시면 될 듯 싶습니다. 이제 코드를 컴파일 해서 실행시켜 보겠습니다. 그리고 다른 터미널에서 fclose에 대한 것을 보면, pid가 4810임을 알 수 있습니다. proc/4810/fd로 가서, ls를 쳐 보겠습니다. 그러면, 꽤 많은 무언가가 출력됨을 알 수 있습니다. 1.txt..
사실, 저는 백준을 풀 때 define 문을 상수 정의할 때 빼고는 써 본 적이 없었습니다. 실무에서는 어떻게 쓸 지는 잘 모르겠지만요. 상수 정의할 때도 가끔씩 써서, 그리 많이 쓴 적은 없습니다. 물론, C언어 시험 볼 때에는 많이 썼겠지만요. 보통 넓이를 구하는 것은 define이 아니라, 함수로 쓰는 편입니다. 이것은, 배보다 배꼽이 더 커지기 때문에 그렇기도 합니다. 백준을 한참 할 때, 많이 본 질문 글 중 하나는 이것을 잘못 써서 맞았는데 왜 틀려요? 하는 경우였습니다. 전처리기에 대한 이야기는 나중에 정리할 때 한꺼번에 언급하기로 하고요. 오늘은 그냥 간단하게 개론만 보도록 하겠습니다. 먼저 상수 정의할 때에는 요긴하게 쓰입니다. 이것은 제가 세그 트리를 구축할 때, (1
최근댓글