c++ - C、C++中的声明和排列代码的习惯

标签 c++ c

我不知道这个问题属于什么,请花时间阅读。涉及到C和C++的区别和写代码的习惯;代码如下: 我把它分成3个文件; 主.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;

    }  

另一个c: ke.c

#include"myh.h"
void fuzhi(unit_t* pa)
{
   pa->number=3;
   pa->msg=(char *)malloc(20);
   printf("fuzhi !");

}

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

所以问题是当我使用 C 运行代码时没有问题,但是当我将它保存为 cpp 时,错误是 'a' 的多重定义;为什么? 第二个问题,不知道自己整理代码的习惯好不好。有人给我一些好的建议吗?当代码很大时,我通常将声明放在h文件中,然后使用c/cpp编写函数的定义。然后用一个main c/cpp来满足main函数。有人能给我一些关于编写代码的好建议吗,我是一个新手。 谢谢。

最佳答案

首先要记住的是 C 和 C++ 是不同的语言,因此对于全局声明的变量有不同的规则。并且您确实多次定义了全局变量a:一次在main.c 文件中,一次在ke.c 中 文件。

这是因为您在头文件中定义变量,您将其包含在两个源文件中。您应该做的是在头文件中声明变量,然后在单个源文件中定义它。

比如在头文件中你应该有

extern int a;

一个源文件中:

int a;

关于c++ - C、C++中的声明和排列代码的习惯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22632996/

相关文章:

c++ - 如何将 Armadillo 库修复为 C++

c++ - 如何让 Doxygen 显示菱形继承图

c - 如何用C语言获得机器随机选择的问题

java - 为什么 mmap()(内存映射文件)比 read() 快

c++ - 在不依赖于用户定义类型的全局命名空间中为标准定义类型重载运算符是否格式正确?

c++ - 使用 C++ 模板函数递归编译时间

c++ - 编码域中的DCT系数和运动 vector 提取

c - 基本 C 问题。 fprintf 和 fgets 失败

c - MSVC errno线程安全

c++ - 对称迭代数组