반응형
9. 다음 주어진 프로그램을 전처리기가 처리한 후 결과가 어떻게 나올지 써보라. 의도한 것과 다르다면 소스를 고쳐라.
#define SQR(x) ((x)*(x)) void main(void) { int i = 2; printf("%d\n", SQR(++i)) }
//전처리기 처리 후 코드
#include <stdio.h> #define SQR(x) ((x)*(x)) void main(void) { int i=2; printf("%d\n", SQR(++i)); //위의 코드는 printf("%d\n", (++i) * (++i)); //와 같다. 즉 3*4가 되어 12가 나온다. //매크로 함수에서는 증감연산자를 쓸 수 없다고 생각하는게 좋으니 i = 2; ++i; printf("%d\n", SQR(i)); //i값을 꼭 증가시켜야 한다면 이렇게 써야하고, i = 2; printf("%d\n", SQR(i + 1)); //그런게 아니라면 그냥 이렇게 쓰면 된다. }
10. 다음 프로그램이 아래와 같은 결과가 출력될 수 있도록 factory.h를 작성하라.
#include <stdio.h> #include "factory.h" int main() { char temp[80]; float r; sprintf_s(temp, "원주율 PI = %f", PI); puts(temp); r = 2.4f; sprintf_s(temp, "반지름이 %f인 원의 면적은 =%f", r, cyclearea(r)); puts(temp); sprintf_s(temp, "반지름이 %f인 원의 길이는 =%f", r, cylen(r)); puts(temp); }
//실행결과
원주율 PI = 3.140000
반지름이 2.400000인 원의 면적은 = 18.086402
반지름이 2.400000인 원의 길이는 = 15.072001
//factory.h #define PI 3.14 #define cyclearea(r) (PI*(r)*(r)) #define cylen(r) (2*PI*(r))
11. 다음 프로그램이 아래와 같은 결과가 출력될 수 있도록 test.h를 작성하라.
#include <stdio.h> #include "test.h" int main() { char temp[80]; sprintf_s(temp, "OS 형태는 %d 입니다.", OSSTYLE); puts(temp); sprintf_s(temp, "BLOCKSIZE 형태는 %d 입니다.", BLOCKSIZE); puts(temp); }
OS 형태는 1입니다.
BLOCKSIZE는 6400입니다.
//test.h #define OSSTYLE 1 #define BLOCKSIZE 6400
반응형