gpt4 book ai didi

C 中的自定义命令行参数

转载 作者:行者123 更新时间:2023-12-02 09:24:26 26 4
gpt4 key购买 nike

我目前正在通过 K&R 的C 编程语言来学习 C,并且已经达到了书中讨论命令行参数的程度。在书中,主例程会写成这样:

int main(int argc, char *argv[])
{
do something
}

根据我的理解,在某些时候必须计算传递给程序的参数数量并将其存储在argc中。此外,参数本身必须存储,并且指向每个参数的第一个字符的指针存储在数组 argv 中,其中 argv[0] 是指向参数名称的指针该命令和 argv[argc] 是一个空指针。这些步骤不可能神奇地发生,这种行为必须在某个地方定义!

举个例子,假设我想存储传递给程序的每个参数的第一个字符,firstc,并丢弃该参数的其余部分(让我们假设我有一个非常非常这样做的充分理由)。我可以像这样编写 main() :

int main(char firstc[])
{
do something
}

显然,使用默认的 argc 和 argv 已经可以很容易地完成此操作,但实际上我不会这样做。我什至无法想象这实际上是必要的场景,但我很想知道这是否可能。

所以我的(完全是理论上的,完全不切实际的)问题是:是否可以为命令行参数定义我自己的行为?如果是的话,人们会如何去做呢?如果相关的话,我正在使用 Ubuntu 16.04 和 GNOME 终端。

附注

我在写这个问题时才意识到,C 脚本完全有可能(也许很可能)对外部发生的事情完全视而不见,并且终端仿真器是为 C 程序准备命令行参数的。

最佳答案

参数的设置实际上并不在 C 标准的范围内,它只是规定了您可以使用的 main 的允许形式。有两种规范形式(假设是托管实现),一种是 argc/argv 选项,另一种是 void 选项(尽管请注意,实现是免费的)提供给其他人)。

通常,有一些代码在调用 main 之前运行,例如从像 crt0.o 这样的目标文件中的启动代码。

但是,如上所述,标准并没有规定该阶段发生的任何事情,“环境”有责任正确设置事物,以便可以调用 main

就执行您的请求而言,我怀疑最简单的解决方案是提供采用规范形式的 main ,并简单地使用第一个字符调用 myMain每个参数,尽管您可能需要智能地处理可能提供给 main 的任意数量的参数。

下面是一个可以处理一到三个参数的示例:

#include <stdio.h>

int myMain0(void) {
printf ("myMain0\n");
return 0;
}

int myMain1(char p1) {
printf ("myMain1 [%c]\n", p1);
return 0;
}

int myMain2(char p1, char p2) {
printf ("myMain2 [%c] [%c]\n", p1, p2);
return 0;
}

int main(int argc, char *argv[]) {
switch (argc) {
case 1: return myMain0();
case 2: return myMain1(argv[1][0]);
case 3: return myMain2(argv[1][0], argv[2][0]);
}
printf ("Invalid argument count of %d\n", argc - 1);
return 1;
}

关于C 中的自定义命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39010302/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com