LLVM每日談之三十二 C++ Insights
來自專欄 LLVM每日談
C++ Insights是一個基於clang的工具,它主要提供代碼到代碼的轉換。它的目標是讓屏幕背後發生一些事情變得可見,讓我們更好的理解編譯器是怎麼運作的。
列舉兩個例子,大家就很明白的知道這個工具到底做了什麼了。
官方例子一:
Source:
#include <cstdio>
#include <vector>
int main()
{
const char arr[10]{2,4,6,8};
for(const char& c : arr)
{
printf("c=%c
", c);
}
}
----------------------------------
Insight:
#include <cstdio>
#include <vector>
int main()
{
const char arr[10]{2,4,6,8};
{
auto&& __range1 = arr;
const char * __begin1 = __range1;
const char * __end1 = __range1 + 10l;
for( ; __begin1 != __end1; ++__begin1 )
{
const char & c = *__begin1;
printf("c=%c
", static_cast<int>(c));
}
}
}
官方例子二:
source:
class Base {
};
class Derived : public Base {};int main() { Derived d; Base& b = d;}-------------------------------------------
Insight:
class Base {
/* public: inline constexpr Base() noexcept; */
/* public: inline ~Base(); */
/* public: inline constexpr Base(const Base &); */
/* public: inline constexpr Base(Base &&); */
};
class Derived : public Base {
/* public: inline constexpr Derived() noexcept; */
/* public: inline constexpr Derived(const Derived &); */
/* public: inline constexpr Derived(Derived &&); */
};
int main() {
Derived d;
Base& b = static_cast<Base&>(d);
}
這個工具目前還在不斷完善,雖然功能上可能有不盡人意的地方。但是,代碼本身可以學到很多關於code transform的知識。
C++ Insights源碼地址:andreasfertig/cppinsights
C++ Insights在線demo地址:C++ Insights
推薦閱讀:
※Clang Static Analyzer - Warning Suppress
※深入研究Clang(二)Abstract Syntax Tree
※LLVM每日談之十一 編譯器相關學習資料推薦
※深入研究Clang(五) Clang Lexer代碼閱讀筆記之Lexer
※LLVM每日談之三 如何創建一個LLVM工程