programing

C에서 ((c) + 1)의 유형은 무엇입니까?

topblog 2023. 6. 7. 22:04
반응형

C에서 ((c) + 1)의 유형은 무엇입니까?

나는 C에서 같은 표현을 발견했습니다.

typeof((c) + 1) _tmp = c;

이게 정확히 무슨 뜻입니까?

답장 감사합니다.

한 가지 의심?만약 c형이 원시형 대신 구조형이라면 +1은 무엇을 할 것입니까?

typeof(C++가 아닌) 플레인 C의 연산자는 표준에 GCC를 추가한 것입니다.괄호 안에 포함된 식의 형식을 사용할 것임을 컴파일러에 알려줍니다.

사용.typeof위와 같이 다른 변수의 유형을 참조로 사용하여 알 수 없는 유형의 변수를 선언할 수 있습니다.주조에도 사용할 수 있습니다.

+내부 작전typeof독특한 효과가 있습니다. typeof((c) + 1)"승진 후에도 남는 c형 또는 1형"을 의미합니다.예를 들어, chars는 int를 포함하는 연산에 사용될 때 int로 승격되고, int는 float로 승격되며, float은 double로 승격됩니다.

그렇게,typeof(int_variable + char_variable)이라int이래로char로 승격할 것입니다.int작업을 수행할 수 있습니다.

컴파일러만 이 문제를 해결할 수 있습니다.typeof평가하지 않고, 가치가 없으며, 런타임에 아무 일도 일어나지 않습니다.

의 전체 설명typeof여기서 찾을 수 있습니다.

var 생성_tmp세인트_tmp의 유형 업캐스트(최대)입니다.c또는int값으로 설정합니다.c.

예를 들어

char c -> int _tmp // char(c) + 1 is int
float c -> float _tmp // float(c) + 1 is float

다른 대답 외에도,+여기 꽤 미묘한 점이 있습니다.을 허용합니다.c식 또는 유형이 될 수 있습니다.

  • 만약 그것이 표현이라면, 말한 것처럼,c로 승격됨int(최소한) 그리고 전체 식의 유형은 적어도 정수 순위를 가집니다.int.
  • 형식 표현식인 경우 괄호는 다음을 포함합니다.c그것을 가치 있는 것으로 삼다.+1그러면 결과 유형은 그냥c.

두 종류의 곡예 모두에게 중요합니다.c산술 유형이며 여기서 이 속임수는 서명된 것을 느슨하게 할 수도 있습니다.c그래서 이 사용법은typeof확장은 보기만큼 유용하지 않습니다.대부분의 경우 사용uintmax_t또는intmax_t그것으로 충분할 것입니다.

이것은 표준 C가 아닙니다.C에는 다음과 같은 것이 없습니다.typeof(사용자 정의 항목을 처리하지 않는 한)

typeof는 일반적으로 컴파일러 확장자(GCC 컴파일러일 가능성이 가장 높음)입니다.당신은 여기에서 그것에 대해 읽을 수 있습니다.

http://gcc.gnu.org/onlinedocs/gcc/Typeof.html

코드를 비교해 보십시오.

typeof((c) + 1) _tmp = c;

와 함께

typeof(c) _tmp = c;

typeof형식 또는 변수의 인수를 사용할 수 있습니다.이제 고려해 보십시오.c~하듯이,

  • struct { int a; int b }
  • struct { int a; int b }
  • 텍스트int.

홍보 만 아니라 char매크로는 다음으로부터 as per uʍop ǝpısdn보호합니다.struct제따. 다음 코드는 컴파일이 되지 , 라서다컴않습지다니.

struct { int a; int b } c;
typeof((c)+1) _tmp = c;

사람들은 금지하기를 원할 것입니다.struct효율성 및 코드 크기 이유, 특히 일반 매크로 내에서의 할당.

형식은 형식을 반환하며 컴파일 시 평가됩니다.

전문은변선의언다미니합을수를 하는 것을 합니다.tmpc와 동일한 유형(일반적으로).

c+1 유형은 c와 다를 수 있기 때문에 관련되거나 다른 유형을 선언할 수 있습니다(c++에서 더 가능성이 높습니다).

에는 포인터에 제생에는각포, 에대만서해터인,만포서대,▁pointer▁for,typeof((c) + 1) = typeof(c);따라서 이것은 전달 매개 변수가 포인터임을 보장할 수 있습니다.

언급URL : https://stackoverflow.com/questions/4436889/what-is-typeofc-1-in-c

반응형