2015-10-14 63 views
4

我想編譯此代碼:STDDEF.H包括但max_align_t是未申報

#include <stdalign.h> 
#include <stdio.h> 
#include <stddef.h> 
int main (int argc , char ** argv) 
{ 
    printf ("%zu\n", alignof (max_align_t)); 
    return 0; 
} 

但是編譯器說:

error: ‘max_align_t’ undeclared". 

stddef.h包括在內,一切都必須是好的,是不是它?

P.S.我已經試着在gcc4.8和gcc4.9下編譯這段代碼,但是我遇到了錯誤。

+3

你試過用'-std = c11'編譯嗎? – smac89

+0

是的,[max_align_t](http://en.cppreference.com/w/c/types/max_align_t)包含在'stddef.h'中,因爲C11 –

+0

在此處編譯得很好(gcc 4.7.2使用'-std = c11 ') – alk

回答

3

要使用C11功能,您需要告訴編譯器在C11兼容模式下運行。

對於gcc,這可以通過指定選項-std=c11來實現。

+0

謝謝。但有趣的是:「爲什麼編譯器,例如在c99模式下,不能完成與c11模式下的編譯器相同的工作?」在我看來,編譯器在c99模式下可以成功轉到stddef.h並找到max_align_t的定義。有人可以解釋我:「這個意見有什麼不對?」 –

+0

如果你自己去你的'stddef.h'並尋找'max_align_t'的定義,它將變得清晰。 –

+0

@ andrei-volkau,對於C99,標識符'max_align_t'沒有保留,所以使用它是入侵用戶名空間。只有C11才能保留它。 –