C 조건부 연산자('?')(두 번째 매개 변수가 비어 있음)
일반적으로 '?' 연산자는 다음 형식으로 사용됩니다.
A ? B : C
그러나 B = A 다음과 같은 약어를 본 경우
A ? : C
이것은 놀랍게도 효과가 있습니다.두 번째 매개 변수를 (스타일에 따라) 그대로 두는 것이 좋을까요, 아니면 특정 컴파일러가 이를 처리하지 못할 가능성이 있을까요?
C 언어에서는 허용되지 않지만(제가 알기로는) gcc와 같은 컴파일러는 바로 가기 a?:c를 확장자로 가지고 있습니다. a?:c
와 같은 의미입니다.a?a:c
.
그것의 agcc의 내선 번호.
x ? : y
와 동등합니다.x ? x : y
내가 크게 틀리지 않는 한, 당신은 컴파일러 확장자(추정치: gcc)를 사용하고 있습니다.저는 이 표준이 3항 연산자에 대한 두 번째 피연산자를 생략하는 것을 허용하지 않는다고 확신합니다.
제가 조금 채워드립니다.
이 표준에서는 조건 연산자라는 용어를 사용합니다.
구문 조건부 표현: 논리적 논리적 표현논리적 논리적 표현?식 : 조건식
조건식은 n 값을 산출하지 않습니다.또한; 위키백과; 조건부
참고: 예:C++은 다음을 포함합니다.
논리적-OR-표현식 ?식 : 할당-표현식
제약 조건: 첫 번째 피연산자는 스칼라[1] 유형을 가져야 합니다. 다음 중 하나가 두 번째 및 세 번째 피연산자에 대해 유지되어야 합니다. 두 피연산자 모두 산술[2] 유형을 가집니다.두 피연산자 모두 동일한 구조[3] 또는 조합[4] 유형을 갖습니다.두 피연산자 모두 보이드[5] 유형을 가집니다.두 피연산자는 모두 정규화된 버전 또는 정규화되지 않은 버전의 호환성에 대한 포인터입니다.유형[7]; 한 피연산자는 포인터이고 다른 피연산자는 널 포인터[8] 상수입니다. 또는한 피연산자는 객체 또는 불완전한[9] 유형에 대한 포인터이고 다른 피연산자는void의 정규화된 버전 또는 정규화되지 않은 버전에 대한 포인터입니다.
풋푸드:
[1] 스칼라 유형 : 산술 유형 및 포인터 유형입니다.[2]산술 유형 : 정수형과 부동형입니다.[3]구조물 유형 : 비어 있지 않은 멤버 개체 집합(및특정 상황, 불완전한 배열), 각 상황은 다음과 같습니다.선택적으로 지정된 이름과 고유한 유형일 수 있습니다.[4]Union type : 비어 있지 않은 구성원 개체의 중복 집합으로, 각 개체는선택적으로 지정된 이름과 고유한 유형입니다.[5]void type : 빈 값 집합입니다. 이 형식은 다음과 같을 수 없는 불완전한 형식입니다.완료된.[6]적격유형 : 1998년(상수, 휘발성), 1999년(제한)2011(_Atomic).* [7]Compatible type : 동일한 유형입니다.[8]null ptr.const.NULL. 구현 정의된 Null 포인터 상수입니다.[9]불완전한 유형 : 개체를 설명하지만 결정하는 데 필요한 정보가 부족한 유형그들의 치수
그래서: 사용하는 것은 현명하지 않습니다.
위키피디아에 따르면, 저는 웹에서 약간의 조사를 했습니다, 이 행동은 C의 GNU 확장에 의해 지원됩니다. http://en.wikipedia.org/wiki/%3F :#C
따라서 다른 컴파일러가 이를 불법으로 간주할 가능성이 매우 높습니다.그런데 이 연산자는 3차 조건부 연산자라고 해서 검색할 수 있습니다.
편집:
gcc와 apple llvm을 확인해보니 정상적으로 작동합니다.
두 번째 매개 변수는 그대로 두는 것이 좋습니다.Bever가 변경되면 위의 문장을 수정하는 것을 기억하지 못할 수 있습니다.또한 B를 문에서 제외하면 다른 사람들이 당신의 코드를 읽고 개선하는 데 어려움을 겪을 수 있습니다.
언급URL : https://stackoverflow.com/questions/10143125/c-conditional-operator-with-empty-second-parameter
'programing' 카테고리의 다른 글
500.21 불량 모듈 목록의 "Managed Pipeline Handler" (0) | 2023.07.07 |
---|---|
적용의 FUN에 몇 가지 인수 전달(및 기타 *적용) (0) | 2023.07.07 |
C++ 프로그램 내에 C 헤더 포함 (0) | 2023.07.07 |
SELECT의 의미는 무엇입니까...XML PATH(' ', 1, 1)의 경우? (0) | 2023.07.07 |
B-트리 대 비트맵 데이터베이스 인덱스 (0) | 2023.07.02 |