본문 바로가기

C언어4

[c언어]printf 서식 지정자 %f로 int값을 출력하면 어떻게 될까? int a = 10;printf("%f", a); 이 코드의 결과는 어떨까?아니 애초에 컴파일이 가능하긴 할까? 컴파일이 되긴 되는데 예측할 수 없다. int 안에는 2의 보수법 형태의 이진수가 들어간다. float 안에는 IEEE 754 표준에 따라 지수부와 가수부로 나뉜 이진수가 들어간다.즉, 두 자료형의 데이터 저장 구조가 다르다는 것이다.그렇다면 printf 내부적으로float를 character로 변환시키는 코드가 있을 것이고int를 character로 변환시키는 코드가 있을 것이다. 애초에 변환 방법 자체가 다르기 때문에 예측할 수 없는 결과가 나온다.추가로 이렇게 타입 간의 변환을 엄격하게 걸러내지 않는 c언어는대표적으로 타입 안정성(type safety)이 약한 언어 중 하나다. 2025. 7. 8.
가변 인자에 대하여 가변인자란 인자의 갯수가 정해지지 않은 인자를 의미한다. 가변 인자를 갖는 함수 프로토타입을 선언할 때는 최소 1개 이상의 고정 인수가 있어야 하고, 가변 인자를 나타내는 '...'은 파라미터 순서상 맨 마지막에 위치해야 한다. int sum(int count, ...) { int res = 0; va_list ap; int i; va_start(ap, count); for(i=0; i 이 부분은 ap 안의 주소값을 t만큼 증가시켜서 ap가 다음 가변인자를 가리키도록 하는 게 목적 ap += _INTSIZEOF(t) - _INTSIZEOF(t) -> 이 부분은 현재 ap가 가리키는 가변 인자를 리턴하는 게 목적 4. va_end #define va_end(ap) ( ap = (va_list)0 ) 위와 .. 2023. 7. 4.
유효 숫자 float형은 유효 숫자를 7개까지 double형은 유효 숫자를 15개까지 보장해 준다고 하는데그런데 유효 숫자는 정확히 무엇을 의미하는 것인지 잘 모르겠어서 한 번 공부해 보았다. 유효숫자는 수의 정확도와 정밀도에 영향을 주는 숫자를 의미한다. 수의 정확도와 정밀도에 영향을 준다는 말은 무슨 말일까? 예를 들어 사과 5432개가 있다. 이 사실을 다른 사람에게 한 치의 오차도 없이 정확하게 전달하려면 5, 4, 3, 2 이 4개의 숫자를 10진법을 이용해 표기해야 한다. 이때 5, 4, 3, 2 이 4개의 숫자를 수의 정밀도에 영향을 끼치는 유효 숫자라고 할 수 있다. 만약 5432.0000000 이런 표기가 있다고 했을 때 소수점 뒤의 무수히 많은 0은 모조리 유효 숫자 취급을 받지 못할 것이다. 소.. 2023. 6. 26.
알면 알수록 헷갈리는 포인터 뽀개기 1. 컴퓨터는 메모리 안에 저장된 데이터에 어떻게 접근하는가? 메모리 안에 10이라는 정수형 숫자를 저장해놓았다고 치자. 그렇다면 용량은 끽해봐야 8byte(long long형을 쓸 경우). 몇 백기가가 넘어가는 주메모리에는 수없이 많은 데이터들이 있을 텐데 이걸 어떻게 찾을 수 있을까? 택배기사가 수없이 많은 집 중 배달을 시킨 집 딱 하나만 골라내기 위해 주소를 사용하듯 컴퓨터도 드넓은 메모리 안에서 원하는 데이터를 찾아내기 위해 주소(address)를 사용한다. 데이터마다 서로 다른 주소값을 부여해 구분하고 해당 데이터가 필요할 때마다 그 데이터만 정확히 콕 찝어서 데려간다. 컴퓨터는 주소를 통해 메모리에 저장된 데이터에 접근한다. 2. 사용자는 메모리 안에 저장된 데이터에 어떻게 접근하는가? 포인.. 2023. 6. 25.