關於C語言函式指標的隨筆
阿新 • • 發佈:2019-02-14
今天博主在編譯C語言程式碼的時候,遇到了兩個警告:
warning: initialization from incompatible pointer type [-Wincompatible-pointer-types]
和
warning: function with qualified void return type called
產生第一個警告的程式碼片段如下:
...
void my_help();
void my_ls();
void my_cat();
const void (*COMMAND_ENTRY[])() = {
my_help,
my_ls,
my_cat
};
...
產生第二個警告的程式碼片段如下:
...
COMMAND_ENTRY[i]();
...
最後發現 const
在函式指標陣列的宣告中是作用在返回值上的,即 COMMAND_ENTRY
這個函式指標陣列中的函式返回值根據宣告應為 const void
,而用於初始化該函式指標陣列的三個函式的返回值都是 void
,由於返回值不匹配,所以產生了這兩個警告。
實現C語言函式指標陣列中存放不同型別函式指標的一種方式
博主最近的作業系統實驗要求實現一個FAT12映象檢視工具,需要提供命令列介面(Command Line Interface,CLI),博主想設計一個所有實現具體功能的函式的公共入口函式 process_input()
void my_help(const char *command);
void my_ls(const char *format, const char *path);
void my_exit();
最後實現如下:
#define PARAM_COUNT 4
typedef struct _pl {
char *params[PARAM_COUNT];
} param_list;
// 使用第一個引數
void my_help(const param_list *list );
// 使用前兩個引數
void my_ls(const param_list *list);
// 不使用任何引數
void my_exit(const param_list *list);
void (*COMMAND_ENTRY[])(const param_list *) = {
my_help,
my_ls,
my_exit
};