[英]Change something in C program with Shell Script
是否可以编写脚本来针对不同的A值运行此代码;
#include <stdio.h>
#define A 3
int main (){
printf("In this version A = %d\n", A);
return(0);
}
我猜有点像for循环吗?
是否可以编写脚本来针对不同的A值运行此代码;
并非如此,因为宏A
在您的代码中定义了一个固定值。 相反,您可以将值作为参数传递:
#include <stdio.h>
int main(int argc, char **argv){
if(argc == 2) {
printf("In this version A = %s\n", argv[1]);
}
return 0;
}
(该代码不会检查其输入是否为整数-如有必要,您可以进行测试)。
您可以通过脚本运行它。 例如,使用bash的for
循环编译以上代码( gcc -Wall -Wextra test.c -o test
):
$ for ((i = 0; i < 10; i++)); do ./test $i; done
In this version A = 0
In this version A = 1
In this version A = 2
In this version A = 3
In this version A = 4
In this version A = 5
In this version A = 6
In this version A = 7
In this version A = 8
In this version A = 9
$
否。但是您可以将A设为命令行arg:
#include <stdio.h>
int main (int argc, char *argv[]) {
int a;
if (argc != 2 || sscanf(argv[1], "%d", &a) != 1) return 1;
printf("In this version A = %d\n", a);
return 0;
}
编译为一个名为foo
的二进制文件,然后
foo 42
将打印
In this version A = 42
您还可以通过在编译命令行中定义A来编译不同版本。 从原始程序中,删除#define
。 然后
gcc -DA=42 foo.c -o foo
./foo
将打印与上面相同的内容。
您是否需要从脚本重复运行程序? 为什么不制作从命令行接受参数的程序?
1)main()函数实际上带有参数,您可以编译一次程序并传递不同的参数,如上面的答案所示2)如果您需要从make脚本中更改一些代码参数,我想说,创建单独的标头包含将写入该文件的定义和编写脚本(>表示开始,>>表示继续编写)。 3)您可以使用等同于#define宏命令的标志来调用编译器。 对于gcc,它是-D,例如-DA = 3而不是#define A
3。
大多数程序使用makefile进行编译。 在这种情况下,您可以编写脚本使脚本使用2)或3),因此建议使用Former,因为您无需将该参数传递给所有编译目标,从而减少了时间或重新编译。 有一些用于更高级操作的工具,例如autoconf。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.