在同一範圍內重複變數名稱

C 標準中表示的約束示例是在範圍 1)中 宣告瞭兩個同名的變數,例如:

void foo(int bar)
{
    int var;
    double var;
}

此程式碼違反約束,必須在編譯時生成診斷訊息。與未定義的行為相比,這非常有用,因為在程式執行之前,開發人員會被告知問題,可能會做任何事情。

因此,約束傾向於是在諸如此類的編譯時容易檢測到的錯誤,導致未定義行為但在編譯時難以或不可能檢測到的問題因此不是約束。

1)確切的措辭:

Version = C99

如果識別符號沒有連結,則除了 6.7.2.3 中指定的標記之外,識別符號(在宣告符或型別說明符中)的宣告不應超過一個具有相同作用域和相同名稱空間的宣告。