[英]Parametric programming in C language
我有一些對不同實體相同的程序。 它們做的事情完全相同,但結構不同。 每個實體在 C 語言文件中都有自己的程序,我想為所有實體編寫一個程序,但它應該根據實體改變行為。
目前我使用例如 printf function 用於這樣的城市:
printf ("%i %s %c %llu %lu", city.city, city.name, city.cityType, city.population, city.country);
對於這樣的國家:
printf ("%i %s", country.code, country.name);
我也使用fwrite(&city,sizeof(strctreCity),1,RBin)
; 和fwrite(&country,sizeof(strctreCountry),1,RBin);
我想根據程序接收到的參數和每個實體的結構文件中的信息來動態改變。 結構的定義可以在每個實體的文件中找到,如下所示:
城市實體的 city.str 文件包含
unsigned long city;
char name[9];
char cityType;
unsigned long long population;
unsigned long country;
國家實體文件 country.str 包含
unsigned long country;
char name[9];
我希望在調用程序時添加參數並且程序根據參數和與參數對應的 str 文件更改其行為。 無需對程序進行硬編碼。
./sampleEntity city
任何一個
./sampleEntity country
問題不是如何讀取結構文件或如何管理程序的參數,而是如何動態管理根據實體結構而變化的程序。
A 部分(來自評論)
關於:“如何動態管理根據實體結構而變化的程序。” 答案:識別實體的結構,例如通過一行中的關鍵字或一行中的單詞數。 然后調用相應實體的子例程。 這方面的更多細節可以在評論中找到。
B 部分(第一個答案)以下代碼評估調用可執行文件的 arguments。 我想,這很簡單,它是如何工作的。 get_arguments
為不同的情況提供不同的返回碼
./sampleEntity city
或者
./sampleEntity country
(您可以使用任何返回碼。這只是一個示例。)
#include <stdio.h>
#include <string.h>
int get_arguments(int argc, char** argv){
if(argc!=2) return 3; // return error code: wrong number of arguments
if(strcmp("city",argv[1])==0) return 1;
if(strcmp("country",argv[1])==0) return 2;
return 4; // return error code: no match with available keywords
}
int main(int argc, char** argv)
{
int res;
res = get_arguments(argc, argv);
printf("case = %i\n",res);
// if(1==res) main_routine_city();
// if(2==res) main_routine:country();
}
而不是在源代碼中編寫“幻數”。 使用常量(預處理器指令)通常是個好主意,例如
#define _RETCODE_CITY 1
#define _RETCODE_COUNTRY 2
等等。 但這是進一步的微調,只是一種選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.