이 3차 조건부입니까?: 올바른(목표) C 구문입니까?
저는 이것이 가능하다고 생각하지 않았지만 분명히 목표 C에서는 허용됩니다.
int a = b ?: c;
여기서 그들이 하는 일을 보면, 그들은 삼원식의 두 번째 부분을 생략하고 있습니다. 만약 b가 0이 아니라면, b는 두 번째 부분으로 사용됩니다.
영리하지만 제가 알기로는 이것은 K&RC와 ANSIC에 반하는 것입니다.
그렇지 않다면, 저는 몇 년 동안 아주 교묘한 구문 트릭에서 빠져 있었습니다... 아아!
업데이트 : gcc입니다.
출처: http://en.wikipedia.org/wiki/%3F%3A
C로의 GNU 확장은 두 번째 피연산자를 생략할 수 있으며, 암시적으로 첫 번째 피연산자를 두 번째 피연산자로 사용할 수도 있습니다.
a = x ? : y;
식은 다음과 같습니다.
a = x ? x : y;
x가 식인 경우에는 한 번만 평가됩니다.식을 평가하는 것이 부작용이 있으면 차이가 큽니다.
이 동작은 두 가지 모두에 대해 정의됩니다.gcc
그리고.clang
만약 당신이 macOS나 iOS 코드를 만들고 있다면, 그것을 사용하지 않을 이유가 없습니다.
하지만 신중하게 고려하지 않고는 휴대용 코드로 사용하지 않을 것입니다.
$ cat > foo.c
#include <stdio.h>
int main(int argc, char **argv)
{
int b = 2;
int c = 4;
int a = b ?: c;
printf("a: %d\n", a);
return 0;
}
$ gcc -pedantic -Wall foo.c
foo.c: In function ‘main’:
foo.c:7: warning: ISO C forbids omitting the middle term of a ?: expression
그래서 안돼요, 그건 허용되지 않아요.이 경우 gcc가 방출하는 것은 다음과 같습니다.
$ ./a.out
a: 2
따라서 정의되지 않은 행동은 여러분이 질문에서 말하는 것을 하는 것입니다. 여러분이 그것에 의존하고 싶지 않더라도 말입니다.
이것은 GNU C 확장입니다.컴파일러 설정을 확인합니다(C 버전을 찾습니다).그것이 Clang의 일부인지 확실하지 않습니다. 제가 얻을 수 있는 유일한 정보는 이 페이지에 있습니다.
소개
이 문서에서는 Clang이 제공하는 언어 확장에 대해 설명합니다.여기에 나열된 언어 확장 외에도 Clang은 광범위한 GCC 확장을 지원하는 것을 목표로 합니다.이러한 확장에 대한 자세한 내용은 GCC 설명서를 참조하십시오.
언급URL : https://stackoverflow.com/questions/8760561/is-this-ternary-conditional-correct-objective-c-syntax
'programing' 카테고리의 다른 글
캐시를 사용하도록 설정한 경우에만 Wordpress에서 찾을 수 없는 파일을 반환함 (0) | 2023.07.10 |
---|---|
분리된 HEAD 상태에서 생성된 Git 커밋은 어떻게 됩니까? (0) | 2023.07.10 |
100% 높이를 파괴하는 Wordpress 관리자 표시줄을 수정하는 방법 (0) | 2023.07.10 |
실제로 먼저 병합하지 않고 병합을 테스트하는 방법 (0) | 2023.07.10 |
Git 병합 오류 " 병합되지 않은 파일이 있으므로 커밋할 수 없습니다." (0) | 2023.07.10 |