我在GNU/Linux機器上使用getopt_long
。 初始化選項列表如下:如何確定所需的期權參數缺失?
static struct option long_options[] = {
{"mode", required_argument, 0, 9},
{0, 0, 0, 0}
};
有代碼
c = getopt_long(argc, argv, "", long_options, index_ptr);
下面一行當我運行我的程序用命令: '?'
prog --mode
上面顯示的代碼行返回在C,但不是「:」作爲根據getopt(3)
手冊頁預期:「錯誤和-1的回報是一樣 爲getopt的()」
是,使用/解析短選項時,一個可以寫在選項列表類似於「:m:」,因此變量c上缺少的參數將包含':',而不是'?',但是在解析時應該如何區分兩種情況(缺少參數,無效選項)只有長選項?
如何區分無效選項和缺少必需參數的選項?
爲什麼'long_options'陣列中已使用9作爲要返回而不是一個字符「9」,以及爲什麼'optstring/shortopts'參數不含有VAL「9:」 ? (請參閱[解析長選項的示例](https://www.gnu.org/software/libc/manual/html_node/Getopt-Long-Option-Example.html#Getopt-Long-Option-Example)) –
@DavidBowling '.val'是一個'int',但主要在'.flag'指針不爲NULL時使用。因爲'9'不能用於檢測快捷參數,所以最好使用像'm'這樣的字符(用於模式)。 –
是的,我在提問之前閱讀了glibc參考手冊的getopt [_long]部分。但不清楚在這種情況下應該返回什麼。 –