→ OPIV: 因為 struct 不是這樣用的... 02/17 11:54
→ OPIV: static CmdForm param = { .name = "mask", .doc = mask_usa 02/17 11:56
→ OPIV: ge }; 02/17 11:56
推 LiloHuang: 在 C 語言的規格,const-qualified 變數不是 constant 02/17 11:57
→ LiloHuang: 在 6.7.8 以及 6.6 都有詳細說明 02/17 12:00
→ linotwo: const char mask_usage[] = "mask netmask"; 02/17 13:24
→ descent: linotwo: 謝謝, 我更加混亂了 02/17 23:44
→ LiloHuang: mask_usage 如果寫成陣列,就會是屬於編譯時期的常數 02/17 23:57
→ LiloHuang: 因此寫成 char mask_usage[] = "mask netmask"; 就可以 02/17 23:57
→ LiloHuang: 然而 const char *mask_ptr = "AA"; 你可以在執行階段 02/17 23:59
→ LiloHuang: 把此指標重新指到另一常數字串 mask_usage = "BB"; 02/18 00:00
→ LiloHuang: 兩者是不同的... 02/18 00:00
→ LiloHuang: 我上面打錯... 是 mask_ptr = "BB"; 特此修正 02/18 00:00
謝謝你的回答。
我把程式縮短了些, m 應是你說的那種 type,
不過以下程式碼無法通過 c compiler。
const char * const m="mask netmask"; // fail
const char * p = m;
int main(int argc, char *argv[])
{
return 0;
}
※ 編輯: descent (182.234.91.197), 02/18/2015 00:36:57
推 LiloHuang: 當為陣列時才會符合ISO/IEC 9899 的 6.6.9 所描述的 02/18 00:40
→ LiloHuang: 編譯器會有能力把 mask_usage 轉成 &mask_usage[0] 02/18 00:42
→ LiloHuang: a pointer to an lvalue designating an object of 02/18 00:43
→ LiloHuang: static storage duration 02/18 00:44
→ LiloHuang: 若是指標不管指到的是 const 或者本身是 const 都不行 02/18 00:45
→ LiloHuang: 這也是預期的,因為這並不符合 6.6.9 所描述的規格 02/18 00:45
推 LiloHuang: 然而這是符合 ISO/IEC 14882 的 5.19,所以 C++ 可以 02/18 00:58
→ descent: 感謝回覆。 02/18 01:18