繁体   English   中英

使用Shell脚本在C程序中进行更改

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM