2017-02-09 23 views
2

我試圖做first tutorial of ROS在Windows在Visual Studio 2015年標識符「__builtin_expect」未定義(ROS期間雙贏教程講話者爲例)

首先,我創建了一個新的WIN 32控制檯應用程序和複製的代碼從here。 然後我按照指南中所述配置項目。雖然調試出現了幾個錯誤:

  • 標識符「__builtin_expect」中的文件service_client.hTestTalker.cpp未定義(這是我的程序的名稱)。
  • 無法打開源文件 「SYS/time.h中」

wiki.ros.org運行的SDK,我測試了它。 我不知道什麼是錯的。 我希望有人能幫助我。

預先感謝您!

回答

1

__builtin_expectGCC的擴展名。它不是由Visual Studio提供的。

由於它僅向編譯器提供了一個提示以針對CPU分支預測進行優化,因此可以用expr替換__builtin_expect(expr, c)的所有實例。

或者,如果合適,請使用__assume代替,如this answer中所述。

+0

這些是不同的:'__builtin_expect'給編譯器提示一個表達式最有可能或更經常是真,而'__assume'在提示錯誤時導致UB。從['__assume' doc](https://msdn.microsoft.com/en-us/library/1b3fsfxw%28VS.80%29.aspx):「_因爲編譯器生成基於'__assume'的代碼,該代碼可能如果'__assume'語句中的表達式在運行時爲false,則不會正確運行._「 – YSC

+0

我建議只調用'#define __builtin_expect(x,y)'並讓優化和分支預測完成工作。相關:[爲已知的更常用路徑優化分支](http://stackoverflow.com/q/35938249/5470596)。 – YSC

+0

@YSC標識符中的雙下劃線是爲實現保留的。 – jotik