2010-01-29 7 views
20

내 프로그램의 일부 변수 유형을 인쇄 (또는 확인)하고 싶습니다. 그것을 할 수있는 좋은 방법이 있습니까? 잘하면, 의도적으로 컴파일러 오류가 발생하더라도 작동하는 방식을 의미합니다. 예를 들어C에서 변수/포인터의 유형을 출력하는 방법이 있습니까?

:

client.c:55: error: incompatible types in assignment 

내가 지금 받고있어 오류입니다. 내가 그렇게처럼 사용할 수 있습니다

client.c:55: error: attempting to assign type struct a to type struct b 

또는 기능 : 내가 원하는 것은 나에게 뭔가를 얘기하는 것입니다

printf(gettype(x)); 

출력 것이다 :

struct b 
+0

어떻게 컴파일 할 수 있습니까? – KeatsPeeks

+0

"컴파일러 오류가 발생했습니다"어떻게 작동합니까? –

+0

"work"는 내 프로그램에서 오류를 수정할 수 있도록 형식을 제공한다는 의미입니다. 편집을 참조하십시오. –

답변

3

은 GDB를 이용하여 디버깅 시도 변수의 유형을 포함한 변수와 관련된 모든 속성을 인쇄합니다. 그러나 GDB를 사용하기 전에 프로그램을 컴파일해야합니다. 당신은 GCC 나 GCC 호환 컴파일러를 사용하는 경우

+0

빌드에 실패한 경우이 작업을 수행 할 수 없습니다. – kursancew

1

당신은 더는 sizeof처럼 작동 typeof 키워드는 (분명히 비 표준 및 비 휴대용)를 사용할 수 있습니다.

+7

불행히도 'typeof'에서 문자열을 가져올 수 없습니다. (비록 g ++에서'typeid (typeof (x)) .name()'을 사용할 수 있습니다.) – kennytm

1

C에서는 변수를 선언 할 때 유형을 제공합니다. 그것은 컴파일러가 할당에 대해 불평 할 때 (즉, 런타임 유형의 객체를 사용하지 않고 정적 유형 만 사용하는 경우) 유일한 정보입니다.

코드로 이동하여 55 행을 찾아 변수가 있는지 확인하고 코드에서 유형을 찾으십시오. C 언어에서는 오버로드가 발생하지 않으며 유형은 정적이며 단순합니다.

43

방금이 작업을 수행하는 방법을 발견했습니다.

printf("%d", variable); 

변수가 다음 gcc -Wall는 유형이 일치하지 않는 것을 불평하는 int 수없는 경우 - 당신이 찾고있는 정확하게 인 변수의 유형을 인쇄합니다.

+0

어디서 볼 것인가를 모르는 환경에서 유용합니다 (예를 들어, yacc로 프로그래밍). – Darthfett

+1

'printf'에 전달되는 동안 포인터가 붕괴되는 배열 타입을 사용할 때 이것은 오해의 소지가 있습니다. – Zulan

관련 문제