본문 바로가기

컴퓨터/C9

[C언어] #if #endif 조건부 컴파일 1) 조건부 컴파일전처리문이므로 컴파일되기 전에 조건을 평가하며 코드를 컴파일 대상에 포함시키거나 제외시키는 역할을 한다. 이때 조건의 형태는 여러 가지가 있지만 주로 매크로 상수의 존재 여부나 값에 대한 평가식이 사용된다. #ifdef, #ifndef2) #if if는 매크로의 값을 평가하거나 여러 가지 조건을 결합하여 컴파일 여부를 결정하는 좀 더 복잡한 전처리문이다#if 조건1코드1 // 조건1을 만족하면 코드1을 컴파일#elif 조건2코드2 // 조건 2가 만족되면 코드2를 컴파일#else코드3 // 둘 다 맞지 않으면 코드 3을 컴파일#endif (1) 상등, 비교 연산자 사용이 가능하다.==, != , >, =, 2013. 2. 20.
[C언어] 가변인자함수 1. 가변 인자함수 함수의 전닮값(파라미터)(인수) 의 개수가 정해져 있지 않은 함수다. ex) printf, scanf 2. 가변 인수 인수의 개수와 타입이 정해져 있지 않은 인수 3. 가변인수함수 : 가벼인수(...)를 이용한 함수 #include //일반 적인 가변 인수 함수의 구조 void VarFunc(int Fix, ...) { va_list plter; va_star(plter, Fix); while()//모든 인수를 다 읽을 때 까지 { va_arg(pValue, 인수타입); } va_end(pValue); } 가. va_list : 전달된 인수들은 스택에 저장되고 함수는 스택에서 인수를 꺼내 쓴다.va_list타입은 char*형으로 정의됭져 있고 가변이수를 읽기 위한 포인터 변수이다. 나.. 2013. 2. 18.
[C언어] scanf 기본 서식문자 조합 정말 보시다시피 %c와 %hhd의 차이가 있죠? 여러분이 아실점은 %c와 %hhd는 다르다는것과, h는 자료형을 한단계 감소한다는겁니다. 그렇다면 반대로, 한단계 증가시키는건 무엇일까요? 앞에서 말했던 l(L) 입니다 %d : int %ld : long %lld : long %f : float %lf : double %Lf : long double 주의 하실점은 lf와 Lf는 서로 다르다는것이죠. 예제를 통해봅시다. 역시 차이점은 자리수가 늘어난거입니다. 그냥 단순해요, 좀더 공간이 넓어진것 이로서 11-2 scanf 기본 서식문자 조합을 마치겠습니다. 여담이지만 컴파일하시다가 종종 "에이 그냥 Lf, lld로 하지, 귀찮게 %d,%lf 가있는거야" 이런생각하실텐데, 공간의 낭비와 효율성을 위하여 각각 .. 2013. 2. 16.
[C언어] Printf 의 %lf, %f와 Scanf의 %lf, %f의 차이 질문 : double형은 scanf를 할 때, 왜 %lf를 해줘야 하고 printf를 할 때는 %f 로 해주어야 하나? 답 : printf 는 포인터가 아닌 값을 받기 때문에 파라미터 리스트에서 각각의 데이터크기를 알 수 있습니다.포맷 문자가 f 이고 파라미터 크기가 4면 float로 처리하고포맷 문자가 f 이고 파라미터 크기가 8이면 double로 처리하게 됩니다. scanf는 입력을 받아야 하니까 모든 파라미터를 포인터로 받게 되죠.하지만, 포인터는 그 주소값 4byte만 전달될 뿐해당 포인터가 가리키는 자료형이 무엇인가는 전달되지 않습니다.즉, scanf가 전달받는 포인터는 void타입 포인터라고 보면 됩니다. 그렇기 때문에 float와 double을 f와 lf로 구분해줘야 하는 거죠. 물론 사용자.. 2013. 2. 16.