#만약 정의된다면 (x) || (y) ; 이것이 유효합니까?
한 번의 리뷰에서 다음과 같은 코드를 발견했습니다.
#if defined(x) || y
위 문장은 무엇을 의미합니까? 조건이 제대로 실행됩니까?
네, 유효합니다.
6.10p1의 표준(C99)은 다음과 같이 말합니다.
if-group:
# if constant-expression new-line groupopt
# ifdef identifier new-line groupopt
# ifndef identifier new-line groupopt
그defined
연산자는 상수 식(6.10.1p1)의 단항 연산자 부분으로 간주됩니다.
예를 들어, 매크로의 경우 조건이 참인 것으로 평가됩니다.x
다음과 같은 경우에 정의됩니다.y
정의되며 다음과 다릅니다.0
이에 대한 추론은 두 가지입니다.
A를 사용하는 대신#ifdef
, 당신은 사용합니다.defined
논리 연산자를 사용할 수 있도록 연산자(&&
,||
, 정의해야 할 내용에 대한 기준이 여러 개인 경우 코드가 제대로 포함되도록 코드를 복제할 필요가 없습니다.
또한, 제 생각에는 다음과 같이 읽기가 훨씬 쉽다고 생각합니다.#if defined(x)
보다#ifdef x
, 그리고 당신은 다음을 할 수 있습니다.#if defined(x) && defined(y)
, 하지만 그건 가능하지 않아요#ifdef
.
네, 그 이후로defined(x)
는 부울이고 true 또는 false를 반환합니다.
위 문장은 "x가 정의되거나 y가 참"임을 의미합니다.
그것은 옳지만 나쁜 관행입니다.하나의 조건에서 두 개의 다른 평가('y'와 'defined(x))를 사용하는 이유는 무엇입니까?다른 사람들에게는 혼란스러울 수도 있습니다.아래 예는 #정의된 매크로에 대한 || 및 && 연산자의 더 일반적인 사용을 보여줍니다.
#define AA 1
#define BB 2
#if (defined AA) || (defined BB)
#warning "A or B"
#endif
#if (defined AA) && (defined BB)
#warning "A and B"
#endif
위 코드가 실행되면 다음 메시지가 화면에 나타납니다.
#warning "A or B"
#warning "A and B"
그러나 코드가 이와 같다면 (AA는 정의되지 않았습니다):
#undefine AA
#define BB 2
#if (defined AA) || (defined BB)
#warning "A or B"
#endif
#if (defined AA) && (defined BB)
#warning "A and B"
#endif
그러면 사용자는 다음과 같은 메시지를 받게 됩니다.
#warning "A or B"
언급URL : https://stackoverflow.com/questions/9946108/if-defined-x-y-is-this-valid
'programing' 카테고리의 다른 글
.ajax() 호출에서 knout.jsobservableArray() 로드 (0) | 2023.10.05 |
---|---|
루비, 레일즈: mysql2 보석, 누가 이 보석을 사용합니까?안정적입니까? (0) | 2023.10.05 |
Android 장치에 소프트웨어 키보드가 표시되는지 여부를 확인하려면 어떻게 해야 합니까? (0) | 2023.10.05 |
워드프레스 미디어 업로더에 컨텍스트 추가 (0) | 2023.10.05 |
함수 자동 로더 (0) | 2023.10.05 |