用Shell脚本更改C程序中的某些内容

用Shell脚本更改C程序中的某些内容,c,linux,bash,shell,unix,C,Linux,Bash,Shell,Unix,是否可以编写一个脚本来为不同的值运行此代码 #include <stdio.h> #define A 3 int main (){ printf("In this version A = %d\n", A); return(0); } 我猜类似于for循环的东西?您需要从脚本重复运行程序吗?为什么不让程序接受来自命令行的参数呢 1主函数实际上接受参数,您可以编译一次程序并传递不同的参数,如上面的答案所示 2如果您需要更改makescript中的一些代码参数,我会说,

是否可以编写一个脚本来为不同的值运行此代码

#include <stdio.h> 
#define A 3

int main (){ 

  printf("In this version A = %d\n", A);
  return(0);
}

我猜类似于for循环的东西?

您需要从脚本重复运行程序吗?为什么不让程序接受来自命令行的参数呢

1主函数实际上接受参数,您可以编译一次程序并传递不同的参数,如上面的答案所示 2如果您需要更改makescript中的一些代码参数,我会说,创建单独的头文件,其中将包含定义,并编写脚本,该脚本将回显到该文件>,以便开始,>>继续编写。 3另一种方法是,您可以使用等同于定义宏命令的标志调用编译器。对于gcc,它是-D,例如-DA=3,而不是定义一个3

大多数程序使用makefile进行编译。对于这种情况,您可以编写脚本使文件使用2或3。前者更可取,因为您不需要将该参数传递给所有编译目标,从而减少时间或重新编译。还有一些用于更高级操作的工具,如autoconf

是否可以编写一个脚本来为不同的值运行此代码

#include <stdio.h> 
#define A 3

int main (){ 

  printf("In this version A = %d\n", A);
  return(0);
}
不是因为宏A在代码中定义了一个固定值。相反,您可以将该值作为参数传递:

#include <stdio.h>

int main(int argc, char **argv){
    if(argc == 2) {
        printf("In this version A = %s\n", argv[1]);
    }
    return 0;
}

不可以。但是您可以创建命令行参数:

#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;
}
将打印

In this version A = 42
还可以通过在编译命令行中定义来编译不同的版本。从原始程序中,删除定义。然后


将打印与上面相同的内容。

使用sed,将输出传输到cc,然后执行cc生成的内容。我认为这是对您真正想要做的事情的简化;也许如果你解释一下那是什么,你可能会得到一个更有用的答案。这是一个很好的答案。你到底想做什么?传统的做法是将参数传递给main,这样你就可以把你的程序称为myprogram。8:这是一个假设答案的问题。你不能在没有问题的情况下给出XY问题的答案,这解释了为什么你没有。其中一个问题是回答为什么不回答。用户没有解释他在做什么。至少有24种方法可以满足他的要求,通过编辑该文件,通过使用参数运行GCC,通过创建autoconf,通过向程序传递参数。这一切都取决于他的实际任务、他使用的工具链\环境以及限制。
In this version A = 42
gcc -DA=42 foo.c -o foo
./foo