当有错误的命令行参数时,如何让 getopt_long() 不打印任何内容?

Edu*_*ure 1 c linux glibc getopt getopt-long

我有一个程序getopt_get()用来解析命令行参数。我的代码是这样的:

int opt;
int optionIndex;
static struct option longOptions[] = {
    {"help", no_argument, NULL, 'h'},
    {"test", no_argument, NULL, 't'},
    {0, 0, 0, 0}
}; 
while ((opt = getopt_long(argc, argv, "ht", longOptions, &optionIndex)) != -1) {
    switch (opt) {
        case 'h':
            help();
            return 0;
            break;
        case 't':
            init();
            test();
            return 0;
            break;
        case '?':
            help();
            return 1;
            break;
        default:
            printf("default.\n");
    }   
Run Code Online (Sandbox Code Playgroud)

当我将正确的命令行参数传递给程序时,它运行良好。但是当错误的参数传递给程序时,它会打印出像这样烦人和多余的词。

例如,我将错误的参数“q”传递给程序

$ ./program -q
./program: invalid option -- 'q'
Usage: -h -t
Run Code Online (Sandbox Code Playgroud)

当有错误的参数时,我只希望它运行我的函数help()而不打印任何单词。

./program: invalid option -- 'q'
Run Code Online (Sandbox Code Playgroud)

我怎样才能停止getopt_long打印这个烦人的词而什么也不打印?

rus*_*tyx 5

阅读精美的手册...

如果getopt()不能识别选项字符,它会向stderr打印一条错误消息,将该字符存储在optopt 中,并返回“?”。调用程序可以通过将opterr设置为 0来阻止错误消息。

所以,在调用之前试试这个getopt_long

opterr = 0;
Run Code Online (Sandbox Code Playgroud)