c语言语法c11,_Atomic类型说明符和限定词之间的C11语法模糊
是的,我認為規范中有歧義.采取
_Atomic int (*f)(int);
這里_Atomic是一個類型限定符. (作為一個函數的返回類型,它不太有意義,但是有效,我認為).現在采取這種替代形式
int _Atomic (*f)(int);
通常類型限定符可以在int之后,這應該等同于其他聲明.但是現在_Atomic之后是括號,所以它必須被解釋為一個類型說明符,然后是語法錯誤.我認為甚至可以做一個例子,其中* f可以被一個有效的typedef替換.
看看第6.7.2.4 p4段的第一句話
The properties associated with atomic types are meaningful only for
expressions that are lvalues.
這清楚地表明他們不希望返回類型的函數被_Atomic限定.
編輯:
會發生同樣的歧義
_Atomic int (*A)[3];
這是完美的意義(指向三個原子整數的數組),我們應該能夠重寫
int _Atomic (*A)[3];
編輯2:要看到括號中的類型的標準不消除歧義,請使用以下有效的C99代碼:
typedef int toto;
int main(void) {
const int toto(void);
int const toto(void);
const int (toto)(void);
int const (toto)(void);
return toto();
}
這是一個功能的重要部分.所有四行都是相同功能的有效原型.現在使用_Atomic作為限定詞
typedef int toto;
int main(void) {
int _Atomic (toto)(void);
return toto();
}
這應該是有效的作為與const的版本.現在我們在這里有一個案例,其中_Atomic后跟括號里面有一個類型,但它不是一個類型說明符.
總結
以上是生活随笔為你收集整理的c语言语法c11,_Atomic类型说明符和限定词之间的C11语法模糊的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 个人管理 - 书籍推荐(待读)
- 下一篇: git使用小记