#ifdef 형태와 활용 방법을 다루었다.
#define IMSI
#ifdef IMSI
#define MAX_SPEED 10
#else
#define MAX_SPEED 100
#endif
int speed;
int main() {
// 최고 속도이하로 수치조정
if (speed > MAX_SPEED)
speed = MAX_SPEED;
}
[예제 코드]
#ifdef 대신 #if defined()로 대체할 수도 있다.
#define IMSI
#if defined(IMSI)
#define MAX_SPEED 10
#else
#define MAX_SPEED 100
#endif
int speed;
int main() {
// 최고 속도이하로 수치조정
if (speed > MAX_SPEED)
speed = MAX_SPEED;
}
Q) 그렇다면 둘의 차이는 무엇일까?
A) #if defined()에서는 여러 항목을 비교할 수 있다.
→ #if defined(FPGA) && (defined(A) || defined(B))
[예제 코드] #if defined()
#include <iostream>
using namespace std;
#define B
#if defined(A) || defined(B)
#define MAX_SPEED 10
#else
#define MAX_SPEED 100
#endif
int main()
{
cout << MAX_SPEED << endl; // 10
}
주의 사항
#ifdef에서도 여러 항목 비교가 되지 않음에도
해당 형태가 컴파일 Error 나지 않는다.
#include <iostream>
using namespace std;
#define B
#ifdef A || B
#define MAX_SPEED 10
#else
#define MAX_SPEED 100
#endif
int main()
{
cout << MAX_SPEED << endl; // 100
}
개발자 의도는 "B"가 defined 되어 있기 때문에
MAX_SPEED는 "10" 이 되어야 하지만
실제 결과는 "100" 이다.
개발자 의도와 다르지만 컴파일 Error 가 나오지도 않기 때문에
Logic 복잡도에 따라서는 바로 알기 어려울 수 있다.
Q) #ifdef와 #if defined() 무엇을 사용해야 될까?
A) 확장성 관점에서는 #if defined()라고 볼 수 있다.
그렇다고 #ifdef 간결함을 놓치고 싶지 않다.
비교 항목이 많은 경우 계속 늘리기도 망설여진다.
상단에 모아서 관리할 수 있긴 하다.
[주의사항]은 여전하지만 🙄
[예제 코드]
#include <iostream>
using namespace std;
#define C
#if defined(A) || defined(B) || defined(C)
#define HIGH_STATUS
#endif
#ifdef HIGH_STATUS
#define MAX_SPEED 10
#else
#define MAX_SPEED 100
#endif
int main()
{
cout << MAX_SPEED << endl; // 10
}
+ IF) 논의 해본다면
① #ifdef로 통일 (+ 2개 이상은 상단에 모아서 관리)
② #if defined()로 통일
③ 변수 1개는 #ifdef로 변수 2개부터는 #if defined()
④ 전체적인 구조와는 큰 관계가 없으므로 개발자 개인 Style에 맞춰서!
+ Q) #ifndef는 어떻게 생각해?
#ifdef는 간결하지만 중간에 "n (not)"은 잘 보이지 않는 편이다.
이런 경우는 #if !defined()로 통일하는 것도
하나의 Convention이 될 수 있다.
🤔 느낌표(!)가 있는게 더 직관적이지 않을까...?
'프로그래밍 언어 > C 언어' 카테고리의 다른 글
[C/C++] [전처리기] #if (0) | 2024.07.23 |
---|---|
[C/C++] 열거형 타입 enum 이란? (3) | 2024.06.06 |
[C 전처리기] #error 활용 예제 (0) | 2022.08.11 |
[C/C++] memmove() 함수 사용과 예제 (0) | 2021.11.28 |
[C/C++] memcpy 사용 방법 (0) | 2021.11.24 |
댓글