반응형

포인터 2

[C99] Compound Literals, C에서의 이름없는 임시 객체

C++11에서 이름없는 임시 객체 (그리고 이동시맨틱) 때문에 머리가 많이 터졌었죠. 그런데 C에서 비슷한 느낌의 Compound Literals라는 걸 만들었습니다. "한 번만 쓰고 버리는" 변수인데, 배열/구조체/공용체 등에서 사용 가능합니다. 이름없는 임시객체와 비슷한 느낌입니다. (타입){초기화 리스트} 이렇게 사용합니다. 타입에는 배열/구조체/공용체가, 초기화 리스트는 일반 배열 사용하듯이 쓰면 됩니다. C++에서 int(5)이렇게 작성하면 5가 담긴 int형 임시 객체를 생성하는 것 처럼 이것도 마찬가지입니다. (int[]){1, 2, 3, 4, 5} 라고 쓰면 1, 2, 3, 4, 5가 담긴 int형 배열을 만들어냅니다. ​ C++에서는 클래스를 만들고 함수를 호출할 때 이동 시맨틱을 통해 ..

[C99] 포인터 최적화를 위한 restrict 키워드

이 키워드가 추가됨에 따라 , 에서도 알 수 있듯 대부분의 표준 라이브러리 함수들에 restrict가 붙었습니다. 최적화 키워드 중 하나인데, restrict을 쓰면 그 포인터가 가르키는 객체는 다른 포인터가 가르키지 않는다는 것을 나타냅니다. 주로 함수의 매개변수로 쓸 텐데, 예시를 보시죠. #include int int_swap(int* restrict p1, int* restrict p2) { if (p1 == p2) return EOF; int temp = *p1; *p1 = *p2; *p2 = temp; return 0; } int main() { int a = 10, b = 5; printf("a = %d, b = %d\n", a, b); int_swap(&a, &b); printf("a = ..

반응형