C 多定义并确保正确编写函数
这是我的.h文件C 多定义并确保正确编写函数,c,C,这是我的.h文件 #ifndef _test_h_ #define _test_h_ void new_cmd(void); void open_cmd(void); void close_cmd(void); void close_all_cmd(void); void save_cmd(void); void save_as_cmd(void); void save_all_cmd(void); void print_cmd(void); void exit_cmd(void); void
#ifndef _test_h_
#define _test_h_
void new_cmd(void);
void open_cmd(void);
void close_cmd(void);
void close_all_cmd(void);
void save_cmd(void);
void save_as_cmd(void);
void save_all_cmd(void);
void print_cmd(void);
void exit_cmd(void);
void call(char *cmd_name);
struct {
char *cmd_name;
void (*cmd_pointer)(void);
} file_cmd[] =
{
{"new", new_cmd},
{"open", open_cmd},
{"close", close_cmd},
{"save", save_cmd},
{"save as", save_as_cmd},
{"save all", save_all_cmd},
{"print", print_cmd},
{"exit", exit_cmd}};
#endif
这是我的函数文件
void call(char *cmd_name){
int i;
scanf("Enter command: %c\n",cmd_name);
for(i = 0; i < sizeof(file_cmd); i++){
if(strcmp(cmd_name, file_cmd[i].cmd_name) == 0){
file_cmd[i].cmd_pointer();
}
}
struct command_struct file_cmd[] = {
// Your initialization...
};
void调用(char*cmd\u名称){
int i;
scanf(“输入命令:%c\n”,cmd\u名称);
对于(i=0;i
我刚刚删除了所有file_cmd函数,因为它似乎适用于其他人
这是我的主要文件
#include <stdio.h>
#include <string.h>
#include "test.h"
int main(void){
char cmd;
call(cmd);
return 0;
}
#包括
#包括
#包括“test.h”
内部主(空){
char-cmd;
呼叫(cmd);
返回0;
}
我更想知道的是我的函数void调用写得是否正确
当我试图编译时,它说
main
函数中,您有一个名为cmd
的变量。它的类型为char
。您将其传递给调用
函数,该函数需要一个char*
类型的参数(即以null结尾的字符串)
要解决此问题,首先需要确保cmd
是正确的类型(即char*
而不是普通的char
)。其次,需要确保此指针实际指向有效的以null结尾的字节字符串
换句话说,类似这样的事情:
char *cmd = "open";
call(cmd);
file_cmd
,因此它将在从这两个源文件创建的两个翻译单元中定义
这里的解决方案是只在头文件中声明变量,并在单个源文件中定义它
例如,在头文件中执行类似的操作
struct command_struct
{
char *cmd_name;
void (*cmd_pointer)(void);
};
extern struct command_struct file_cmd[];
然后在一个源文件中(如“函数文件”)
您的代码还存在其他问题,其中一些问题会导致错误 例如,
sizeof
运算符返回字节大小,而不是数组中的元素数。要获取数组中的元素数,需要将整个数组的字节大小除以单个元素的字节大小。例如,sizeof file\u cmd/file\u cmd[0]
请注意,除法只适用于实数组,而不适用于指针,而且数组很容易衰减为指针(指向它们的第一个元素)