printf(3)
-
(C언어) String의 주소 이해하기 ("...")
C언어 코딩을 하다 보면 여러 라인에 걸쳐 출력을 하고 싶은 경우가 생긴다. 요즘은 컴퓨터 성능이 워낙 좋아서 크게 신경 쓰지 않고 각각 출력하여 문제가 없다. 아래와 같이 각각의 변수에 따라 함수를 호출 하면 된다. CPU 성능이 약한 MPU level에서 작업을 한다면, 느린 성능을 가진 printf를 여러 번 호출하는 것은 좀 부담이 될 수 있다. 이를 한번만 호출하게 수정을 하려면 어떻게 해야 할까?? 간단하게 아래와 같이 수정을 할 수 있다. 이제 한 줄로 되었는데 indentation이 엉망이다. 이렇게 해서야 사용하기가 좋지 않다. 여기서 "" 의 의미가 주소연산자의 연속을 의미한다는 것을 안다면 아래와 같이 string을 배치하여 연속적인 주소에 있는 문자로 표시할 수 있다. 콤마(,)가 ..
2024.01.09 -
(C언어) 변수에 저장된 값을 10진수 16진수 string으로 변환하기
int형으로 저장된 값을 10진수 16진수 string으로 변환을 하여야 할 때가 있다. 일반적인 알고리즘으로는 다음과 같이 변환을 할 것이다. 1. 10진수로 변환 시 음수인지 양수인지 결정 2. 10진수로 변환 시 음수일때는 양수로 변환 3. 10또는 16으로 나눈 나머지 값을 char형으로 저장 4. 기존 값을 10 또는 16으로 나누어서 다시 저장 5. 0이 될때 까지 3,4를 반복 6. 저장된 값을 최근 값부터 출력될 수 있도록 배열 정렬 위의 알고리즘을 코드로 변환하면 아래와 같이 장황해진다. 쉽지 않은 코드가 되었다. 특히 16진수 변환에는 음수로 출력되지 않고 양수로 출력해야 되는 문제로 좀 더 복잡해졌다. 결과는 아래와 같이 정상적으로 출력이 되었다. 이제 이 프로그램을 sprintf를 ..
2024.01.05 -
(C언어) printf() 함수 성능 및 예외 상황에서 출력 이해하기
프로그램 코딩에 있어 정보를 출력할 수 있다는 것이 얼마나 큰 축복인지 처음에는 이해할 수 없을 것이다. 특히 embeded 시스템이나 kernel 부분 작업을 하다 보면 깜깜한 밤에 한줄기의 빛이 출력되어 나오는 메시지를 보는 것일 것이다. printf로의 출력을 이해 하면 좀 더 디버깅하는데 도움이 될 것이다. 일반 OS가 있는 시스템에서 printf 출력은 실시간성을 보장해 주지 못한다는 것을 기억하자. 보통 출바꿈 문자인 "\n"을 만나면 저장되어 있는 buffer를 바로 출력해 주지만, 개행 문자가 없다면 출력이 다소 지연이 될 수 있다. Hello World를 출력하는 함수인데 개행 문자가 없다. 출력 지연이 생기다는 것이다. 지금은 다른 예외가 없어 개행문자가 없이도 정상적으로 출력이 되었다..
2024.01.04