YSTest: Language Implementation Hints

YSTest PreAlpha_b800_20170810 The YSLib Test Project

- 首页
- 相关页面
- 模块
- 命名空间
- 类
- 文件

宏定义
Language Implementation Hints

语言实现的提供的附加提示。 更多...

## 宏定义

#define | YB_ATTR(...)
| GNU 风格属性。 更多...
#define | YB_ATTR_STD(...)
| C++ 标准属性。 更多...
#define | YB_ATTR_fallthrough
| 用于 switch 语句的 fallthrough 属性。 更多...
#define | YB_ATTR_gnu_printf(...)
| GNU 风格 printf 属性。 更多...
#define | YB_ATTR_returns_nonnull
| 指示返回非空属性。 更多...
#define | YB_ALLOCATOR
| 指示修饰的是分配器，或返回分配器调用的函数或函数模板。 更多...
#define | YB_ASSUME(_expr) ((_expr) ? void(0) : YB_ABORT)
| 假定表达式总是成立。 更多...
#define | YB_EXPECT(_expr, _constant) (_expr)
#define | YB_LIKELY(_expr) (_expr)
#define | YB_UNLIKELY(_expr) (_expr)
| 分支预测提示。 更多...
#define | YB_FLATTEN
| 标记函数尽可能内联定义内的调用。 更多...
#define | YB_NORETURN
| 指定无返回值函数。 更多...
#define | YB_PURE
| 指示函数或函数模板实例为纯函数。 更多...
#define | YB_STATELESS
| 指示函数或函数模板实例为无状态函数。 更多...

## 详细描述

语言实现的提供的附加提示。

自从
  build 294

保证忽略时不导致运行时语义差异的提示，主要用于便于实现可能的优化。

## 宏定义说明

#define YB_ALLOCATOR

指示修饰的是分配器，或返回分配器调用的函数或函数模板。

注解
  指示行为类似 std::malloc 或 std::calloc 等的函数。

警告
  要求满足指示的假定，否则行为未定义。

参见
  https://blogs.msdn.microsoft.com/vcblog/2015/10/21/memory-profiling-in-visual-c-2015/

自从
  build 373

指示函数若返回非空指针，返回的指针不是其它任何有效指针的别名， 且指针指向的存储内容不由其它存储决定。

在文件 ydef.h 第 432 行定义.

#define YB_ASSUME | ( |  | _expr | ) | ((_expr) ? void(0) : YB_ABORT)

假定表达式总是成立。

注解
  若假定成立有利于优化。

警告
  若假定不成立则行为未定义。

自从
  build 535

在文件 ydef.h 第 447 行定义.

参考自 ystdex::in_place().

#define YB_ATTR | ( |  | ... | ) |

GNU 风格属性。

警告
  不检查指令。用户应验证可能使用的指令中的标识符在宏替换后能保持正确。

自从
  build 373

在文件 ydef.h 第 353 行定义.

#define YB_ATTR_fallthrough

用于 switch 语句的 fallthrough 属性。

自从
  build 793

在文件 ydef.h 第 383 行定义.

参考自 NPL::SXML::ConvertAttributeNodeString(), CHRLib::GUCSMapper< CharSet::GBK >::Decode(), CHRLib::GUCSMapper< CharSet::UTF_8 >::Decode(), CHRLib::GUCSMapper< CharSet::UTF_16BE >::Decode(), CHRLib::GUCSMapper< CharSet::UTF_16LE >::Decode(), CHRLib::GUCSMapper< CharSet::UTF_32BE >::Decode(), CHRLib::GUCSMapper< CharSet::UTF_32LE >::Decode(), NPL::A1::EvaluateLeafToken(), YSLib::UI::ATrack::LocateThumb(), NPL::NPLUnescape(), NPL::LexicalAnalyzer::ParseByte() , 以及 CHRLib::GUCSMapper< CharSet::UTF_8 >::switch().

#define YB_ATTR_gnu_printf | ( |  | ... | ) |

GNU 风格 printf 属性。

注解
  Clang++ 未支持此属性，警告 [-Wignored-attributes] 。

自从
  build 615

在文件 ydef.h 第 398 行定义.

#define YB_ATTR_returns_nonnull

指示返回非空属性。

自从
  build 676

参见
  http://reviews.llvm.org/rL199626 。
  http://reviews.llvm.org/rL199790 。

待办事项:
  确认 Clang++ 最低可用的版本。

在文件 ydef.h 第 413 行定义.

#define YB_ATTR_STD | ( |  | ... | ) |

C++ 标准属性。

注解
  注意和 GNU 风格不同，在使用时受限，如不能修饰 lambda 表达式非类型的声明。

警告
  不检查指令。用户应验证可能使用的指令中的标识符在宏替换后能保持正确。

自从
  build 605

在文件 ydef.h 第 366 行定义.

#define YB_EXPECT | ( |  | _expr,
|  |  | _constant
| ) |  | (_expr)

在文件 ydef.h 第 462 行定义.

#define YB_FLATTEN

标记函数尽可能内联定义内的调用。

参见
  https://gcc.gnu.org/bugzilla/show_bug.cgi?id=48731 。

自从
  build 646

在文件 ydef.h 第 477 行定义.

#define YB_LIKELY | ( |  | _expr | ) | (_expr)

在文件 ydef.h 第 463 行定义.

参考自 YSLib::UI::AMUnitList::AdjustViewLengthForHeight(), YSLib::Drawing::TextRegion::ClearLine(), YSLib::Drawing::CopyBuffer(), CHRLib::GUCSMapper< CharSet::GBK >::Decode(), CHRLib::GUCSMapper< CharSet::UTF_8 >::Decode(), YSLib::Shells::Shell::DefShlProc(), YSLib::Drawing::DrawCross(), YSLib::Drawing::DrawPolygon(), YSLib::Drawing::DrawRect(), YSLib::Drawing::DrawRectRoundCorner(), YSLib::Drawing::DrawTick(), YReader::FetchEncodingString(), YSLib::Drawing::FontCache::FontCache(), YSLib::Timers::ImplDeDtor(), YSLib::Drawing::FontCache::InitializeDefaultTypeface(), YReader::ShlTextReader::Locate(), YSLib::UI::LocateForWidgetNode(), YSLib::UI::Menu::Menu(), YReader::ShlTextReader::OnKeyDown(), YSLib::Drawing::BlitScannerLoop< _bDec >::operator()(), YSLib::Drawing::PrintChar(), NPL::PrintIndent(), YSLib::UI::ProgressBar::Refresh(), YSLib::Drawing::TextRegion::Scroll(), YSLib::DS::UI::DualScreenReader::ScrollByPixel(), YSLib::UI::MTextList::SetList(), YSLib::Drawing::CompactPixmap::SetSize(), YSLib::Drawing::CompactPixmapEx::SetSize(), YSLib::Application::Switch(), YSLib::Drawing::TransformRect(), YSLib::Drawing::Typeface::Typeface(), YReader::ReaderBox::UpdateData() , 以及 YSLib::DS::UI::DualScreenReader::UpdateView().

#define YB_NORETURN

指定无返回值函数。

注解
  不保证适用修饰 lambda 。

警告
  当指定的函数调用实际返回时行为未定义。

自从
  build 396

在文件 ydef.h 第 504 行定义.

#define YB_PURE

指示函数或函数模板实例为纯函数。

后置条件
  函数外可访问的存储保持不变。

注解
  假定函数保证可返回；返回类型 void 时无意义。
  假定函数无外部可见的副作用：局部记忆化合并重复调用后不改变可观察行为。
  不修改函数外部的存储；不访问函数外部 volatile 存储； 通常不调用不可被 YB_PURE 安全指定的函数。

警告
  要求满足指示的假定，否则行为未定义。

自从
  build 373

指示函数或函数模板的求值仅用于计算返回值，无影响其它顶层块作用域外存储的副作用， 且返回值只依赖参数和/或编译时确定内存位置（如静态存储的对象的）存储的值。

在文件 ydef.h 第 527 行定义.

#define YB_STATELESS

指示函数或函数模板实例为无状态函数。

前置条件
  若参数是对象指针或引用类型，必须保证指向或引用的对象是其它参数，或者不被使用。

注解
  假定函数调用的结果总是相同：返回值总是不可分辨的右值或指示同一个内存位置的 左值。任意以一次调用结果替代调用或合并重复调用时不改变可观察行为。
  不访问函数外部的存储；通常不调用不可被 YB_STATELESS 安全指定的函数。
  可被安全指定的函数或函数模板是 YB_PURE 限定的函数或函数模板的真子集。

警告
  要求满足指示的假定，否则行为未定义。

参见
  WG21 P0078R0 。

自从
  build 373

指示函数或函数模板的求值仅用于计算返回值，无影响其它顶层块作用域外存储的副作用， 且返回值只依赖参数的值，和其它存储无关。

在文件 ydef.h 第 548 行定义.

#define YB_UNLIKELY | ( |  | _expr | ) | (_expr)

分支预测提示。

自从
  build 313

在文件 ydef.h 第 464 行定义.

参考自 YSLib::UI::AMUnitList::AdjustOffsetForHeight(), ystdex::cache_lookup(), platform::CategorizeNode(), NPL::CheckReducible(), YSLib::Drawing::TextRegion::ClearLine(), NPL::SXML::ConvertDocumentNode(), YSLib::GUIApplication::DealMessage(), CHRLib::GUCSMapper< CharSet::GBK >::Decode(), CHRLib::GUCSMapper< CharSet::UTF_8 >::Decode(), CHRLib::GUCSMapper< CharSet::UTF_16BE >::Decode(), CHRLib::GUCSMapper< CharSet::UTF_16LE >::Decode(), CHRLib::GUCSMapper< CharSet::UTF_32BE >::Decode(), CHRLib::GUCSMapper< CharSet::UTF_32LE >::Decode(), YSLib::Drawing::GGraphics< unique_ptr< Pixel[]> >::DefGetter(), YSLib::Devices::InputManager::DispatchInput(), NPL::A1::EvaluateLeafToken(), YSLib::DS::UI::DualScreenReader::Execute(), YSLib::Execute(), YSLib::Drawing::NativeFontSize::GetSizeRec(), YSLib::UI::ImplDeDtor(), YSLib::Drawing::Typeface::LookupGlyphIndex(), YSLib::Drawing::Typeface::LookupSize(), platform::FileDescriptor::Deleter::operator()(), YSLib::Text::TextFileBuffer::iterator::operator++(), ystdex::ifile_iterator::operator++(), YSLib::Text::TextFileBuffer::operator[](), YSLib::Drawing::PutCharBase(), YSLib::FPSCounter::Refresh(), YSLib::Timers::Timer::RefreshDelta(), YSLib::UI::InputTimer::RefreshHeld(), YSLib::Timers::Timer::RefreshRemainder(), YReader::ShlTextReader::Scroll(), YSLib::DS::UI::DualScreenReader::ScrollByPixel(), YSLib::Text::TextFileBuffer::Seek(), YSLib::TranslateTime(), YSLib::Drawing::Typeface::Typeface(), YSLib::UI::HexViewArea::UpdateData(), YSLib::DS::UI::DualScreenReader::UpdateView() , 以及 platform_ex::Windows::YB_NONNULL().