我不知道这个问题属于什么,请花点时间阅读.它涉及C和C++的差异以及编写代码的习惯; 代码如下:我把它分成3个文件; main.c
#include"myh.h"
unit_t *paa;
int main()
{
paa=(unit_t*)malloc(sizeof(unit_t));
if(paa==NULL){
printf("out of memory\n");
exit(1);
}
fuzhi(paa);
printf("hello !%d",paa->number);
free(paa->msg);
free(paa);
paa=NULL;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
anohter c:ke.c
#include"myh.h"
void fuzhi(unit_t* pa)
{
pa->number=3;
pa->msg=(char *)malloc(20);
printf("fuzhi !");
}
Run Code Online (Sandbox Code Playgroud)
h文件:myh.h
#ifndef P_H
#define P_H
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct{
int number;
char *msg;
}unit_t;
void fuzhi(unit_t* pa);
int a;
#endif
Run Code Online (Sandbox Code Playgroud)
所以问题是当我使用C运行代码时它没有问题,但当我将其保存为cpp时,错误是'a'的多个定义; 为什么?第二个问题是我不知道我安排代码是好还是不好的习惯.有人给我一些好建议吗?当代码很大时,我通常把声明放在h文件中并使用ac/cpp编写函数的定义.然后使用主c/cpp来满足主要功能.有人可以给我一些关于编写代码的好建议,我是一个新的学习者.谢谢.
Som*_*ude 10
您必须记住的第一件事是C和C++是不同的语言,因此对全局声明的变量有不同的规则.并且您确实a多次定义了全局变量:一次在main.c文件中,一次在ke.c文件中.
这是因为您在头文件中定义了变量,您在两个源文件中都包含该变量.您应该做的是在头文件中声明变量,然后在单个源文件中定义它.
例如,您应该在头文件中
extern int a;
Run Code Online (Sandbox Code Playgroud)
在一个源文件中:
int a;
Run Code Online (Sandbox Code Playgroud)