我在Linux平台上用C语言编程。我想知道应该是头文件中的声明顺序和#defines
。
例如,如果我的头文件包含以下内容,那么任何人都可以建议我应该安排所有这些声明的完美顺序,如宏,扩展声明等功能。
这对于在可读性和编码标准方面正确地将所有这些内容安排在头文件中非常有用。
下面是示例头文件(我想以正确的顺序排列以下内容):
#include <pthread.h> // Including Header files
#include <signal.h>
#define IMAGE_DIRECTORY "Abcdefgh..." // Providing #defines
#define FAILED_TO_RECOGNIZE "Xykbkksk..."
#define PROGRESS_FRAME_COLOR "#8e8ea1"
#define FRAME_BG_COLOR "#7c90ac"
#define PRINT_FUNCTION_NAME fprintf(stderr,
"CTRL IN FUNCTION : %s\n",__func__); // Macro like functions
typedef struct {
int userId; // Structure
char name[32], rollNo[32];
char class[16], section[16];
unsigned long Id;
}data_type;
int noOfUsersList=0, usersListCount=0; // Global variables
答案 0 :(得分:4)
多年来我没有这样做,但是当我在Unix,MS.DOS,OS / 2,NetWare和Windows上大量开发时,我开发了这种做法:
也许你可以反转(1)和(2),但我发现这个命令在很多编译器和操作系统中运行得最好。
答案 1 :(得分:1)
#define
的宏定义是不是声明。唯一的要求是应该在使用之前定义宏。它们保持定义直到编译单元结束,或明确#undef
(或重新定义...)。
我的风格惯例是将类似语句的宏定义为具有&#34;功能&#34;像语法一样:
#define PRINT_FUNCTION_NAME() fprintf(stderr, \
"CTRL IN FUNCTION: %s @%s:%d\n", __func__, __FILE__, __LINE__)
注意空的正式宏参数(即第一个()
)和缺少终止分号(因为你将使用它作为准函数调用,例如PRINT_FUNCTION_NAME();
声明)。另请注意,在调试消息中也使用__FILE__
和__LINE__
。
通常情况下,类似语句的宏是do{
某事 } while(0)
,因为这是一种语法,它具有类似外观的语句,并且总是用作语句(包括{{1>}的然后部分,或if
分支等)。来自else
的示例:
<ncurses.h>
答案 2 :(得分:1)
编码风格是主观的,我个人使用下面描述的规则和方法,但请注意,这是我自己的意见,没有绝对的真理。然而,它们基于长期经验,在某些情况下基于广泛认可的编码标准(MISRA,CERT等)。
规则:
在.h文件中,允许按以下顺序显示以下项目:
#ifndef MYHEADER_H
...)extern const
)。#endif
在.c文件中,允许按以下顺序显示以下项目:
extern const
)。static const
)。static
)的私有变量的定义。static type func (type param);
)