簡體   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