繁体   English   中英

头文件中全局变量的初始化

[英]initialization of global variables in header file

我在代码中具有以下条件:

头文件:

功能:

#ifndef functionality_h
#define functionality_h


#include  <stdio.h>
#include  <stdlib.h>
#include  <string.h>


/*The field value attribute declaration*/
#define size_adhaar 3000
#define size_aspid 8
#define size_input 65
#define size_esignClass 2
#define size_sc 2
#define size_ver 4
#define size_txn 45


/*Replacement string declaration */

extern const char replace_adhaar[];
extern const char replace_aspid[];
extern const char replace_input[];
extern const char replace_esignClass[];
extern const char replace_sc[];
extern const char replace_ver[];
extern const char replace_txn[];

/*Max length of field attribute*/

extern int max_adhaar_size;
extern int max_aspid_size;
extern int max_input_size;
extern int max_esignClass_size;
extern int max_sc_size;
extern int max_ver_size;
extern int max_txn_size;



/*
 The declaration of the field attribute.
*/


char adhaar[size_adhaar];
char aspid[size_aspid];
char input[size_input];
char esignClass[size_esignClass];
char sc[size_sc];
char ver [size_ver];
char txn[size_txn];

void incorrect_val_test(FILE *, FILE *, FILE *, FILE *, FILE *, FILE *, FILE *, FILE *, FILE *);

#endif

和功能。c

#include "functionality.h"
#include "function.h"

/* Initialization Block starts*/

const char replace_adhaar[]     = "REPLACE_Adhaarii_";
const char replace_aspid[]      = "REPLACE_aspidii_";
const char replace_input[]      = "REPLACE_Inputii_";
const char replace_esignClass[] = "REPLACE_esignClassii_";
const char replace_sc[]         = "REPLACE_scii_";
const char replace_ver[]        = "REPLACE_verii_";
const char replace_txn[]        = "REPLACE_txnii_";

/*Max length of field attribute*/

int max_adhaar_size      = 3000;
int max_aspid_size       = size_aspid+sizeof(replace_aspid);
int max_input_size       = size_input+sizeof(replace_input);
int max_esignClass_size  = size_esignClass+sizeof(replace_esignClass);
int max_sc_size          = size_sc+sizeof(replace_sc);
int max_ver_size         = size_ver+sizeof(replace_ver);
int max_txn_size         = size_txn+sizeof(replace_txn);


/*Field true value initialization*/

char adhaar[size_adhaar] = {"RbEY0VVRJNVFtNDhMMGh0WVdNK1BDOUJkWFJvPQ=="};
char aspid[]             = {"ASP-101"};
char input[]             = {"936a185caaa266bb9cbe981e9e05c"};
char esignClass[]        = {"1"};
char sc[]                = {"Y"};
char ver[]               = {"1.0"};
char txn[]               = {"2250dc54-79e8-42ad-b86b-7ec09759"};

/*Initialization Block end*/

void incorrect_val_test(FILE *fp_adhaar, FILE *fp_aspid, FILE *fp_input, FILE *fp_esignClass, FILE *fp_sc, FILE *fp_ver, FILE *fp_ts, FILE *fp_txn, FILE *fp_vtxn)
{
     //Some processing done here.
}

问题是如果我在头文件中初始化变量,那么由于头文件包含在多个源文件中,因此编译器给出了多个定义错误。

如果我只在头文件中声明它并在源文件之一中初始化,则相同的变量将在代码中重复写入两次。

这使代码显得冗长而笨拙。

因此,有没有更好的解决办法,例如:

1.在同一位置声明或初始化。
2.如何通过函数初始化并在main()中调用它
或其他方式使代码看起来更少。

因为我们必须在标头中声明大量变量,并在源文件中使用完全相同的签名对其进行初始化。 对于我们的导师来说,他看起来就像我们在重复同一件事。 应该有更好的方法。 谢谢....

您正在声明大量变量-绝对不是干净的代码(鲍勃叔叔的干净代码可以为您提供帮助)

如果确实要这样做,则需要在头文件中用“ extern”声明所有全局变量,并在源文件中定义它们。 这会导致您的所有文件(包括带有全局变量的标头的“知道”变量的头),并使所有变量在内存中仅创建一次(每个源文件仅被编译一次)。

请记住-在99%的情况下,您可以编写没有任何全局变量的程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM