这是一个有效的C11翻译单元,可以在没有GCC 5.1和Clang 3.7警告的情况下进行编译:
_Static_assert(1, "Test.");
int main(void) {
return 0;
}
根据the draft standard N1570,_Static_assert
可以从declaration
(参见第6.7节)和struct-declaration
(参见第6.7.2.1节)非终结符生成function-definition
。 我想强调最后一个:似乎你可以在哪里做任何声明,包括union或struct标签的声明,你也可以做一个静态断言。
但你真的可以在任何地方使用它们吗?
请注意,declaration-list
非终结符(请参阅第6.9.1节)可选地包含int main(void)
_Static_assert(1, "Test.");
{
return 0;
}
。我认为这里可以包含一个静态声明:
main.c:2:5: error: expected declaration specifiers before '_Static_assert'
然而,GCC 5.1抱怨:
for
Clang 3.7对该计划有类似的抱怨。
int main(void) {
for (_Static_assert(1, "Test."); 0; );
return 0;
}
语句的第一个参数中?我们来看看这个节目:
for
尽管main.c:2:10: error: expected identifier or '('
的第一个参数可以是自C99以来的表达式或声明,但即使GCC接受此程序,Clang也说:
_Static_assert
这些缺陷是在实现中,还是我在规范草案中遗漏了一些禁止在这些情况下使用override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "showIngredientInRecipe" {
if let selectedIndexPath = self.tableView.indexPathForSelectedRow {
if selectedIndexPath.section == 1 {
let listIngredients = recipeItem.ingredients[selectedIndexPath.row]
selectedIngredient = listIngredients.ingredient
let svc = segue.destinationViewController as! UINavigationController
let destination = svc.topViewController as! IngredientDetailViewController
destination.ingredientItem = selectedIngredient
print("selectedIngredient \n \(selectedIngredient)")
}
}
}
}
的约束?