2010-08-09 10 views
37

GCC에서 어떤 점에서 <?>? 연산자가 있다는 것을 알게되었습니다. GCC 4.5에서 어떻게 사용할 수 있습니까? 그들이 제거 되었습니까? 그렇다면 언제입니까?C 내선 번호 : <? and >? 연산자

Offset block_count = (cpfs->geo.block_size - block_offset) <? count; 
cpfs.c:473: error: expected expression before ‘?’ token 
+0

이 질문은 C에만 해당됩니다. –

+0

이 질문에 대한 모든 사랑은 어디에서 왔습니까? 감사! –

+0

PHP short-form 태그와 일치하는 일치 smci

답변

38

최근 매뉴얼 say :

G ++ 최소 및 최대 사업자 ('<?'와 '>?')과 화합물의 형태 ('<?=')와 '>?=') 사용되지 않으며 이제 G ++에서 제거됩니다. 이 연산자를 사용하는 코드는 std::minstd::max 대신 사용하도록 수정해야합니다.

이전 문서를 빠르게 검색하면 버전 4.0에서 제거되었음을 알 수 있습니다 (3.4.6은 포함, 4.0.4는 포함하지 않음). g++ (하지 C 컴파일러)의

+1

G ++에서만 사용 가능 했었는데 잘못 읽었을 수 있습니다. –

+0

@Matt Joiner 저것은 docs가 말하는 무슨이다, 그렇습니다 : "GNU C++ (그러나 GNU C에서 아닙니다"). –

+4

링크를 제공 할 수 있다면 +1하고 싶습니다. –

8

이전의 반복은 당신에게 최소 또는 최대 값을주는 이러한 연산자를 사용하지만, 긴 std::minstd::max에 찬성 사용되지 않습니다했습니다.

기본적으로, 그들은 (없이 하지만 이중 a의 평가 또는 b의 가능성)에 동일시 : 그들을 대체 용어 (그리고 당신이 정말로 을 교체해야합니다)에서

a <? b  -->  (a < b) ? a : b 
a >? b  -->  (a > b) ? a : b 

을 수행 할 수 있습니다

Offset block_count = cpfs->geo.block_size - block_offset; 
if (block_count > count) block_count = count; 

또는 등가물 std::min를 사용 : 같은 것을 사용합니다.

저는 C/C++ "확장 기능"(특히 비추천 및/또는 제거 된 기능)을 사용하는 데 큰 팬이 아닙니다. 특정 언어 구현과 관련되어 있기 때문입니다.

완벽하게 적절한 표준 방법을 사용할 수있는 경우 비표준 확장 프로그램을 사용하지 마십시오.

관련 문제