使用结构函数指针的C头的传统方式是什么?

使用结构函数指针的C头的传统方式是什么?,c,struct,function-pointers,C,Struct,Function Pointers,在结构中使用带有函数指针的C头文件和源文件的传统方式是什么 比如,;我在头文件中声明了我的结构,在代码文件中声明了所有函数和源代码。在源文件中声明结构并将所有函数指针分配给适当的函数是否是惯例?您做得对,结构通常放在头文件中 通常,头文件用于设计代码的框架。实际代码在另一个文件中实现 通常,头文件将包含: 1功能原型 2类定义 3结构和联合定义 4宏 有关组织代码的详细信息,请参阅。您做得对,结构通常放在头文件中 通常,头文件用于设计代码的框架。实际代码在另一个文件中实现 通常,头文件将包含:

在结构中使用带有函数指针的C头文件和源文件的传统方式是什么


比如,;我在头文件中声明了我的结构,在代码文件中声明了所有函数和源代码。在源文件中声明结构并将所有函数指针分配给适当的函数是否是惯例?

您做得对,结构通常放在头文件中

通常,头文件用于设计代码的框架。实际代码在另一个文件中实现

通常,头文件将包含:

1功能原型

2类定义

3结构和联合定义

4宏


有关组织代码的详细信息,请参阅。

您做得对,结构通常放在头文件中

通常,头文件用于设计代码的框架。实际代码在另一个文件中实现

通常,头文件将包含:

1功能原型

2类定义

3结构和联合定义

4宏


有关组织代码的更多信息,请参阅。

是的,将声明结构和函数放在头文件中是处理大型程序的好方法。我想你做得对,但我还是想给你一个建议

因为您没有给出具体的代码,所以我必须使用我的一个代码作为示例:

#ifndef _COMMAND_H
#define _COMMAND_H

struct Book
{
char isbn[14];
char name[60];
char author[20];
char publisher[20];
char date[9];
float price;
float discount;
};
typedef struct Book BOOK;

struct Node
{
struct Book book;
struct Node *prev;
struct Node *next;
};
typedef struct Node NODE;

int loadArray(BOOK *ary, int num, char * fileName);
int saveAs(BOOK *pBook, int size, char * fileName);
void showAll(BOOK *pBook, int size);
int errCmd();
int menu();

int search(BOOK *pBook, int size, char *isbn);
int sort(BOOK * pBook, int num);
int update(BOOK *pBook, int size, char * isbn);
int delete(BOOK *pBook, int* pSize, char * isbn);
int insert(BOOK *pBook, int *pSize);
int append(BOOK *pBook, int *pSize);

#endif
这是一个头文件,用于MISto处理书籍信息

我想告诉您,ifndef define endif在头文件中是必需的,它可以确保每个头文件只结束一次。否则,它可能会有错误的重新定义


我真诚地希望我的回答能对你有所帮助。谢谢。

是的,将声明结构和函数放在头文件中是处理大型程序的好方法。我想你做得对,但我还是想给你一个建议

因为您没有给出具体的代码,所以我必须使用我的一个代码作为示例:

#ifndef _COMMAND_H
#define _COMMAND_H

struct Book
{
char isbn[14];
char name[60];
char author[20];
char publisher[20];
char date[9];
float price;
float discount;
};
typedef struct Book BOOK;

struct Node
{
struct Book book;
struct Node *prev;
struct Node *next;
};
typedef struct Node NODE;

int loadArray(BOOK *ary, int num, char * fileName);
int saveAs(BOOK *pBook, int size, char * fileName);
void showAll(BOOK *pBook, int size);
int errCmd();
int menu();

int search(BOOK *pBook, int size, char *isbn);
int sort(BOOK * pBook, int num);
int update(BOOK *pBook, int size, char * isbn);
int delete(BOOK *pBook, int* pSize, char * isbn);
int insert(BOOK *pBook, int *pSize);
int append(BOOK *pBook, int *pSize);

#endif
这是一个头文件,用于MISto处理书籍信息

我想告诉您,ifndef define endif在头文件中是必需的,它可以确保每个头文件只结束一次。否则,它可能会有错误的重新定义


我真诚地希望我的回答能对你有所帮助。谢谢。

举个例子会有用吗?举个例子会有用吗?这是一篇你链接到的有用文章。但是,您的答案只包含链接,而且“仅链接”的答案并不受欢迎。我建议你找到一种方法,把这篇文章的简要概要合并起来,或者对它所说的内容进行一个旋转,以解决这个问题,比如它是什么。不幸的是,这个问题本身很模糊,这让你的工作变得更加困难。这是一篇你链接到的有用的文章。但是,您的答案只包含链接,而且“仅链接”的答案并不受欢迎。我建议你找到一种方法,把这篇文章的简要概要合并起来,或者对它所说的内容进行一个旋转,以解决这个问题,比如它是什么。不幸的是,这个问题本身非常模糊,这使得你的工作变得更加困难;回答得好。您是否意识到您没有为函数errCmd和menu提供原型?您已经声明它们存在,并且都返回一个int,但是您没有对参数进行任何说明。这只意味着它们不像printf那样采用可变参数列表,printf采用可变参数列表,但在其他方面可以提供任何参数。这与C++相同,其中相同的行声明不带参数的函数。要将这些转换为C的原型,必须编写int errCmdvoid;和int menuvoid;。试试:gcc-Wmissing原型。@JonathanLeffler谢谢你的评论。我学到了更多。我现在正在学习C++。C和C++的比较是我在学习中所做的。欢迎使用堆栈溢出;回答得好。您是否意识到您没有为函数errCmd和menu提供原型?您已经声明它们存在,并且都返回一个int,但是您没有对参数进行任何说明。这只意味着它们不像printf那样采用可变参数列表,printf采用可变参数列表,但在其他方面可以提供任何参数。这与C++相同,其中相同的行声明不带参数的函数。要将这些转换为C的原型,必须编写int errCmdvoid;和int menuvoid;。试试:gcc-Wmissing原型。@JonathanLeffler谢谢你的评论。我学到了更多。我现在正在学习C++。比较C和C++是我正在做的,通过我的研究。