2013-08-07 54 views
0

我正在爲一個項目使用最近的1.5.2版本的POCO C++庫,並且每次我編譯我的項目時,都會在POCO代碼中得到上述「錯誤」。我說「錯誤」是因爲它們顯示爲錯誤,但它們並不妨礙我編譯,鏈接或執行我的項目。智能感知:無效的對齊說明符值

的錯誤出現在 「基金會/包含/ POCO/alignment.h」:

POCO_ALIGNEDCHARARRAY_TEMPLATE_ALIGNMENT(512); 
POCO_ALIGNEDCHARARRAY_TEMPLATE_ALIGNMENT(1024); 
POCO_ALIGNEDCHARARRAY_TEMPLATE_ALIGNMENT(2048); 
POCO_ALIGNEDCHARARRAY_TEMPLATE_ALIGNMENT(4096); 
POCO_ALIGNEDCHARARRAY_TEMPLATE_ALIGNMENT(8192); 

較低的值(16,32,64,128)不產生誤差。

我有兩個問題:

  1. 究竟是上面的代碼試圖做?
  2. 他們爲什麼會產生錯誤,我該如何擺脫它們?

我使用buildwin.cmd具有以下配置構建POCO:

VS_VERSION 100 
ACTION build 
LINKMODE static_mt 
CONFIGURATION both 
PLATFORM Win32 

回答

1

這是一個有點很難看到沒有看到實際的「錯誤」(如果編譯成功,他們沒有編譯器錯誤,但是參見下文),但宏如此定義:

#define POCO_ALIGNEDCHARARRAY_TEMPLATE_ALIGNMENT(x) \ 
    template <> struct AlignedCharArrayImpl<x> \ 
    { \ 
     char aligned alignas(x); \ 
    } 
    #define POCO_HAVE_ALIGNMENT 
#endif 

換句話說,它試圖創建一些模板對準結構的定義,如AlignedCharArrayImpl<16>AlignedCharArrayImpl<8192> 。錯誤是可能由於通過一個無效的比對alignas,根據您的標題Invalid alignment specifier value

但是,在這種情況下,您的代碼不應該實際編譯,因爲C++ 11 7.6.2明確指出不支持的對齊會使程序不合格。沒有看到實際的錯誤信息,我無法幫助那個特定的方面。

我也有與Microsoft C++產品(我使用C#居多)一點經驗,但this page似乎表明了alignas 「少即完成」 支持:

既不的Visual C++ 2010,也沒有視覺在Visual Studio C++ 2012年實施了核心語言關鍵字alignas/alignof來自投票進入工作文件的對齊建議。 Visual C++ 2010有TR1的aligned_storage。 Visual Studio 2012中的Visual C++將aligned_union和std :: align()添加到標準庫。

我不知道是否有任何的改變,因爲這是出版但也有至少one bug report上缺乏支持此功能,爲遞延已關閉(意思是,據推測,還沒有固定的)。所以它可能是這是造成你的問題。


,並根據您的評論,這只是智能感知抱怨對齊,我相信這是覆蓋在this bug report

我們使用智能感知單獨的編譯器和構建,不幸的是,他們不同意對齊的上限。

換句話說,如果您的編譯器正在編譯它,您可以安全地忽略Intellisense錯誤。顯然,微軟對IDE的定義並不像我們期待的那樣「整合」:-)

+0

有趣的是,實際的錯誤信息實際上只是「智能感知:無效的對齊說明符值」,這似乎是表明它是某種IDE「錯誤」而不是構建/編譯器錯誤。編譯器編譯輸出不會產生與這些錯誤相關的任何內容。 – pqvst

+0

@pbergqvist,請參閱更新,Intellisense和編譯器不一定同意對齊的上限。 – paxdiablo