320x100
C계열에 ##연산자가 있다.
##의 의미는 "이어준다"라는 의미이다.
전처리이기 때문에 치환을 하고 컴파일을 하기 때문에 가능하다.
아래는 예제코드와 결과이다.
배열을 써서 for문을 사용하여 초기화하여도 되나,
배열을 사용하면 안 될 때가 있을 시(있는진 모르겠지만) 이런 방식도 있다.
#define MAKE_VAR(n) int var_##n = 100+n;
#define VAR_PRINT(n) printf("%d\n",var_##n);
#include <stdio.h>
int main()
{
for(int i=0;i<=5;i++)
{
MAKE_VAR(i);
VAR_PRINT(i);
// or prinft("%d\n", var_0 ~ var_5);
}
return 0;
}
또 다른 예제로는 레지스터 코딩할 때 사용하면 편리하다.
현재 MCU가 없어서 아래 블로그를 참고
https://3larvas.tistory.com/11
레지스터 Address를 보면 PIO[name]가 반복되고, 주소값 앞의 0x400E가 반복된다.
또한 0x - 16진수로 되어있고 8byte이기 때문에 long long 선언과 끝에 심볼 L을 넣어줘야 깔끔한데
이것을 ##연산자로 보기 편하게 사용해보자.
#define MAKE_VAR(n,v) unsigned long long PIO##n = 0x400E##v##L;
#include <stdio.h>
int main()
{
MAKE_VAR(A,0E10);
printf("PIOA : %llX\n", PIOA);
MAKE_VAR(B,1010);
printf("PIOB : %llX\n", PIOB);
MAKE_VAR(C,1210);
printf("PIOC : %llX\n", PIOC);
MAKE_VAR(D,1610);
printf("PIOD : %llX\n", PIOD);
MAKE_VAR(E,1810);
printf("PIOE : %llX\n", PIOE);
return 0;
}
printf 또한 ##연산자로 깔끔히 처리할 수 있지만, 귀찮다.
반응형
'프로그래밍 > C,C++,C#' 카테고리의 다른 글
[C,C++,C#] 구조체 padding 제거(feat. 구조체 크기 계산) (0) | 2023.06.04 |
---|---|
[C,C++,C#] 구조체 메모리 크기 계산 (0) | 2023.06.04 |
[C] 공용체(union) 변수 사용 (feat. 콜론 연산자) (0) | 2023.04.07 |
[C/C++] 간편하게 LOG 남기기(feat. 가변인자) (0) | 2023.03.29 |
[Unity] Google Play Console에서 광고 ID 사용을 선언해야합니다. (0) | 2022.11.12 |
댓글