是否可以編寫腳本來針對不同的A值運行此代碼;使用Shell腳本在C程序中更改某些東西
#include <stdio.h>
#define A 3
int main(){
printf("In this version A = %d\n", A);
return(0);
}
我想爲循環?
是否可以編寫腳本來針對不同的A值運行此代碼;使用Shell腳本在C程序中更改某些東西
#include <stdio.h>
#define A 3
int main(){
printf("In this version A = %d\n", A);
return(0);
}
我想爲循環?
是否可以編寫一個腳本來運行此代碼以獲取不同的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;
}
(代碼不檢查其輸入是一個整數 - 這在需要時可以進行測試)。
你可以通過腳本來運行它。例如,使用一個循環for
的bash編譯上面(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
$
您是否需要從腳本中重複運行程序?爲什麼不讓程序接受來自命令行的參數? 1)main()函數實際上需要參數,你可以編譯一次程序並傳遞不同的參數,如上面的回答所示 2)如果你需要從make腳本改變一些代碼參數,我會說,創建單獨的頭文件,其中包含定義和寫入腳本,該腳本將回應該文件(>開始,>>繼續寫入)。 3)另一種方法,你可以調用你的編譯器的標誌,將等於#define宏命令。對於gcc,它是-D,例如-DA = 3而不是#define A
3.
大多數程序使用makefile進行編譯。對於這種情況,您可以使用腳本make file來使用2)或3)前者更好,因爲您不需要將該參數傳遞給全部編譯目標,從而減少時間或重新編譯。有更多高級操作的工具,比如autoconf。
不可以,但可以使一個命令行參數:
#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
將打印與上面相同。
使用sed,將輸出輸出到cc,然後執行cc生成的內容。 – nicomp
我認爲這是對你真正想要做的事情的簡化;也許如果你解釋了那是什麼,你可能會得到更有幫助的答案。 –
這是[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。你真的想做什麼? –