相关疑难解决方法(0)

如何禁用几行代码的GCC警告

在Visual C++中,可以使用#pragma warning (disable: ...).我还发现在GCC中你可以覆盖每个文件的编译器标志.我怎样才能为"下一行"做这个,或者使用GCC围绕代码区域推送/弹出语义?

c gcc pragma compiler-warnings

200
推荐指数
8
解决办法
12万
查看次数

用于C/Unix的参数解析助手

我知道以下内容:

  • 令人尊敬的 getopt(3)
  • 扩展 getopt_long
  • glibc argp用于Unix风格的参数向量的解析器
  • 来自GNOME项目的popt(或其在Glib中的精神继承者)

我确信还有更多我没有使用过甚至没有听过的; 快速谷歌搜索显示Gopt,argtableOptlist.

就个人而言,我argp最喜欢,并且我使用getopt/ 编写的每个程序getopt_long(超出某个复杂的基线)都已转换为使用argp.它比所有GNU风格的约定更加广泛可用popt,比getopt_long文档更强大,更灵活.在缺点方面,它远非最容易使用(由于非常灵活),并且支持它的代码非常冗长(C中的许多内容也是如此).

你用了什么,为什么?

是的,我的意思是C而不是C++.有大量的C++解析器,但我不使用C++.

约翰米利金指出,popt不再维持.我列出它是因为许多程序仍在使用它 - 包括AbiWord,rpm,rsync和samba - 尽管Gnome努力迁移.但我现在也添加了一个指向Glib的参数解析器的链接.


对于C++参数解析,请参阅问题C++有哪些参数解析器库?

c command-line parsing

37
推荐指数
2
解决办法
1万
查看次数

在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)

但这只有在没有输入可选参数时才有效.

c command-line getopt

6
推荐指数
1
解决办法
3388
查看次数

从命令行c运行程序的特定部分

我有一个程序可以做两件事.但我希望程序只根据我在格式中输入的命令运行一个特定的部分

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语句轻松完成此操作,但是是否可以直接跳转到我在命令提示符下说的语句?

c

4
推荐指数
1
解决办法
96
查看次数

来自argv的分段故障(核心转储)打印字符串

我只是想检查命令行参数,看看它是否在命令行中工作.如果我执行'./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)

我这样做的原因是因为我将采用该字符串并稍后对其进行比较.我不明白为什么这么简单会导致错误.

c

-1
推荐指数
1
解决办法
1244
查看次数

标签 统计

c ×5

command-line ×2

compiler-warnings ×1

gcc ×1

getopt ×1

parsing ×1

pragma ×1