LLVM每日談之三十二 C++ Insights

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工程

TAG:編譯器 | Clang | LLVM |