这让我非常抓狂,因为这是一件非常简单的事情,但我似乎做不到。
假设我有一个名为 test.c 的程序,其内容如下。
#include <stdio.h>
main() {
int bool_or(int x, int y) {
int result = x|y;
//return result;
printf("%d\n", result);
}
int bool_xor(int x, int y) {
int result= x^y;
//return result;
printf("%d\n", result);
}
}
现在假设我想从终端调用其中一个函数。我该怎么做?我编译了程序,可以手动注释掉函数定义并在编辑器中输入特定值并显示一些内容,但如果我只想在命令行上输入类似 bool_xor(3, 5) 的内容,就像我在运行 Python 之类的语言时所做的那样,该怎么办?
基本上我问的是如何进行函数调用。谢谢!
答案1
抱歉,但你必须了解 C 语法。有两个主要问题:
main
无法在内部定义函数标准C 甚至在 GCC 扩展中,它肯定不会像您想象的那样工作。- 调用一个函数并不是凭空而来的,您必须告诉使用什么作为参数以及如何将它们重新加工成合适的形式。
我已将您的代码重新编写到可以工作的状态(在一个名为的文件中bool_xor.c
):
#include <stdio.h>
#include <stdlib.h>
int bool_xor(int x, int y) {
int result= x^y;
printf("%d\n", result);
return 0;
}
int main(int argc, char **argv) {
if (argc<3) {
printf("Too few args.\n");
exit(1);
}
return bool_xor( atoi(argv[1]), atoi(argv[2]) );
}
现在编译并进行几个简单的测试:
$ gcc -Wall --pedantic -o bool_xor bool_xor.c
$ ./bool_xor 1 2
3
$ ./bool_xor 7 5
2
要创建一个单独的or
函数,您要么需要重新设计main()
以决定它调用哪个函数,要么只需要另一个bool_or.c
文件并生成一个执行该单一作业的单独二进制文件(就像这个一样)。
这是一个组合的例子,它在值前compare.c
采用xor
或参数来确定执行哪个内部函数。or
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int bool_or(int x, int y) {
printf("%d\n", x|y);
return 0;
}
int bool_xor(int x, int y) {
printf("%d\n", x^y);
return 0;
}
int main(int argc, char **argv) {
if (argc!=4) {
printf("Needs 3 parameters. Expects:\n\t%s xor|or value value\n", argv[0]);
exit(1);
}
/* TODO check that arguments are valid */
if (strcmp(argv[1], "xor") == 0)
return bool_xor( atoi(argv[2]), atoi(argv[3]) );
return bool_or( atoi(argv[2]), atoi(argv[3]) );
}