我最近注意到,当给定以双破折号开头的参数时,我编写的一些程序(使用 libgetopt)会出现段错误,例如--help
.
我设法用以下小程序重现了这一点:
#include <getopt.h>
int main(int argc, char *argv[]) {
// Parse arguments.
struct option long_options[] = {
{ "test", required_argument, 0, 't' }
};
int option_index, arg;
while((arg = getopt_long(argc, argv, "t:", long_options, &option_index)) != -1);
return 0;
}
当我编译并运行它时,./a.out --help
它工作正常。但是,一旦我使用-O3
它进行编译,就会出现段错误。在 OS X Mavericks (10.9) 上使用 Apple LLVM 版本 5.0 (clang-500.2.79) 观察到此行为。
我能做些什么来解决这个问题,还是我应该避免-O3
在未来使用?