在Visual C++中,可以使用#pragma warning (disable: ...).我还发现在GCC中你可以覆盖每个文件的编译器标志.我怎样才能为"下一行"做这个,或者使用GCC围绕代码区域推送/弹出语义?
我知道以下内容:
我确信还有更多我没有使用过甚至没有听过的; 快速谷歌搜索显示Gopt,argtable和Optlist.
就个人而言,我argp最喜欢,并且我使用getopt/ 编写的每个程序getopt_long(超出某个复杂的基线)都已转换为使用argp.它比所有GNU风格的约定更加广泛可用popt,比getopt_long文档更强大,更灵活.在缺点方面,它远非最容易使用(由于非常灵活),并且支持它的代码非常冗长(C中的许多内容也是如此).
你用了什么,为什么?
是的,我的意思是C而不是C++.有大量的C++解析器,但我不使用C++.
约翰米利金指出,popt不再维持.我列出它是因为许多程序仍在使用它 - 包括AbiWord,rpm,rsync和samba - 尽管Gnome努力迁移.但我现在也添加了一个指向Glib的参数解析器的链接.
对于C++参数解析,请参阅问题C++有哪些参数解析器库?
我有一个接受可选参数的程序.必要的参数是文件和整数(1或更多).可选参数是字符串和整数的混合.
因此,命令行上的正确输入可能是:
./main trace_file 8 12 # (only necessary arguments)
./main –n 3000000 –p page.txt trace_file 8 7 4 # (with optional arguments)
Run Code Online (Sandbox Code Playgroud)
我需要将整数trace_file转换成数组.在启用可选参数时,我无法弄清楚如何执行此操作,因为命令行上有另一个整数.推进正确的方向将非常感激,因为我无法弄清楚如何做到这一点.
编辑:到目前为止,解析参数的所有内容是:
for(j=2, k=0; j<argc; j++, k++) {
shift += atoi(argv[j]);
shiftArr[k] = 32 - shift;
bitMaskArr[k] = (int)(pow(2, atoi(argv[j])) - 1) << (shiftArr[k]);
entryCnt[k] = (int)pow(2, atoi(argv[j]));
}
Run Code Online (Sandbox Code Playgroud)
但这只有在没有输入可选参数时才有效.
我有一个程序可以做两件事.但我希望程序只根据我在格式中输入的命令运行一个特定的部分
program -a
program -s
Run Code Online (Sandbox Code Playgroud)
a或s的编程方式是告诉它做某些特定的事情.
例如,如果我的程序是这样的:
# program -a entered
z = x + y
# program -s entered
z = x - y
Run Code Online (Sandbox Code Playgroud)
现在我可以在运行程序后使用if语句轻松完成此操作,但是是否可以直接跳转到我在命令提示符下说的语句?
我只是想检查命令行参数,看看它是否在命令行中工作.如果我执行'./a.out hello'但是当我执行'./a.out'时我会收到错误.
#include <stdio.h>
int main(int argc, char * argv[]){
printf("Test");
printf("\n%s",argv[0]);
printf("\n%s",argv[1]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我这样做的原因是因为我将采用该字符串并稍后对其进行比较.我不明白为什么这么简单会导致错误.