libtooling을 사용하는 프로그램에서 일부 유형을 "기본 제공 유형"으로 인식 할 수있는 방법이 있습니까? 예를 들어 , 내가 int16_t을하고 싶습니다, uint32_t 등은 당신이 ".../llvm/tools/clang/include/clang/AST/BuiltinTypes.def"
봐이있는 경우 등 부호, 짧은clang, libtooling 새로운 표준 내장 데이터 형식을 추가하십시오.
답변
, 그 다음은 내장을 선언 할 것으로 타입 정의의보다는 정규 내장 유형으로 인식 유형은 int
및 long long
입니다. 그것은 완전히 똑바로 앞으로하지 않습니다 '. 꽤 많은 코드를 수정해야합니다. 예를 들어 ".../llvm/tools/clang/lib/Sema/Sema.cpp"
과 ".../llvm/tools/clang/lib/AST/Type.cpp"
에 타입 정의의 일부가 있습니다. Int128
을 grep하면 (예 : size_t
과는 달리 clang 자체가 [많이]를 사용하지 않는 것이 좋음) 많은 장소에서 나타납니다. 자신의 새로운 유형의 제작을 소개하기 위해 추가 코드를 사용하여 모든 장소 (또는 대부분의 장소)를 커버해야합니다.
나는 아마도 clang -include cstdint myprog.cpp
과 같은 것을하는 것이 훨씬 쉽다고 말할 수 있습니다. 즉, #include <cstdint>
[또는 같은 종류의 파일을 자신의 버전으로] 컴파일러에서 장면 뒤에서 수행해야합니다.이 작업을 자신의 코드로 드라이버에 추가 할 수도 있습니다.
꽤 오래 어렵다. lib의 소스를 수정하면 정말 즐겁지는 않지만 ... ^^ 파싱하기 전에 런타임에 정규형을 추가하는 또 다른 방법이 있습니까? –
내가 말했듯이, 당신은 clang이 실제 소스 이전에 (include 파일과 같은) 일부 소스 파일을 읽을 수있게 만들 수있다. 이제 일하러 가야하지만, 오늘 밤 집에있는 컴퓨터 앞에 서있을 때 어떻게 작동하는지 확인할 수 있습니다. –
그게 내가 한 일이다. 사용자 정의 stdint.h를 사용하여 다음과 같은 형식을 structs로 정의한다. typedef struct {} int8_t 등등. 그러나 꽤 어색하다. –
왜 하시겠습니까? – SingerOfTheFall
임베디드 장치를 모니터하는 전역 변수를 나열합니다. 하지만 고정 길이 타입이 필요합니다. 그리고 typedef 등을 관리하는 것을 피하기 위해 컴파일러가 이러한 유형을 빌트인 유형으로보고 싶습니다. 이러한 유형의 재정의에 대해 생성 된 오류는 신경 쓰지 않습니다. –
"내장형"*으로 인식되는 것은 무엇을 의미합니까? – Jarod42