添加了两个文件,一个.c 一个是他的头文件,编译出现莫名其妙的错误,估计应是各种文件包含编译的问题,求大神指点

Lion.Kuo 2015-07-15 11:57:20

头文件
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_MEM_ITEM_CNT 10240
typedef struct __shpMemCtrl{
unsigned int totalShpMemory;
unsigned int itemCnt;
void *ptr[MAX_MEM_ITEM_CNT];
unsigned int size[MAX_MEM_ITEM_CNT];
}shpMemCtrl;

shpMemCtrl gShmMemCtr;
extern void *Malloc_count(int size);
extern void Free_count(void *prt);
下面源文件
#include "sizecount.h"


void *Malloc_count(int size)
{
void *ptr = malloc(size);
static int first = 1;
if(first){
memset(&gShmMemCtr, 0, sizeof(gShmMemCtr));
first = 0;
}

for(int i=0; i<MAX_MEM_ITEM_CNT; i++){
if(gShmMemCtr.ptr[i] == NULL){
gShmMemCtr.ptr[i] = ptr;
gShmMemCtr.size[i] = size;
gShmMemCtr.itemCnt ++;
gShmMemCtr.totalShpMemory += size;
break;
}
}
return ptr;
}


void Free_count(void *ptr)
{
for(int i=0; i<MAX_MEM_ITEM_CNT; i++){
if(gShmMemCtr.ptr[i] == ptr){
gShmMemCtr.ptr[i] = NULL;
gShmMemCtr.totalShpMemory -= gShmMemCtr.size[i];
gShmMemCtr.size[i] = 0;
gShmMemCtr.itemCnt --;
break;
}
}
free(ptr);
}
...全文
138 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Yofoo 2015-07-15
  • 打赏
  • 举报
回复
C扩展名文件编译是用C方式编译, 这种编译方式跟C++会有些区别 你可以把扩展名改成cpp, 再试试看 也可以从编译选项修改编译方式为C++
Lion.Kuo 2015-07-15
  • 打赏
  • 举报
回复
报错 1>e:\projects\proj4\proj4libtest\proj4\sizecount.c(13): error C2143: 语法错误 : 缺少“;”(在“类型”的前面) 1>e:\projects\proj4\proj4libtest\proj4\sizecount.c(13): error C2143: 语法错误 : 缺少“;”(在“类型”的前面) 1>e:\projects\proj4\proj4libtest\proj4\sizecount.c(13): error C2143: 语法错误 : 缺少“)”(在“类型”的前面) 1>e:\projects\proj4\proj4libtest\proj4\sizecount.c(13): error C2143: 语法错误 : 缺少“;”(在“类型”的前面) 1>e:\projects\proj4\proj4libtest\proj4\sizecount.c(13): error C2065: “i”: 未声明的标识符 1>e:\projects\proj4\proj4libtest\proj4\sizecount.c(13): warning C4552: “<”: 运算符不起任何作用;应输入带副作用的运算符 1>e:\projects\proj4\proj4libtest\proj4\sizecount.c(13): error C2065: “i”: 未声明的标识符 1>e:\projects\proj4\proj4libtest\proj4\sizecount.c(13): error C2059: 语法错误:“)” 1>e:\projects\proj4\proj4libtest\proj4\sizecount.c(13): error C2143: 语法错误 : 缺少“;”(在“{”的前面) 1>e:\projects\proj4\proj4libtest\proj4\sizecount.c(14): error C2065: “i”: 未声明的标识符 1>e:\projects\proj4\proj4libtest\proj4\sizecount.c(15): error C2065: “i”: 未声明的标识符 1>e:\projects\proj4\proj4libtest\proj4\sizecount.c(16): error C2065: “i”: 未声明的标识符 1>e:\projects\proj4\proj4libtest\proj4\sizecount.c(19): error C2043: 非法 break 1>e:\projects\proj4\proj4libtest\proj4\sizecount.c(28): error C2143: 语法错误 : 缺少“;”(在“类型”的前面) 1>e:\projects\proj4\proj4libtest\proj4\sizecount.c(28): error C2143: 语法错误 : 缺少“;”(在“类型”的前面) 1>e:\projects\proj4\proj4libtest\proj4\sizecount.c(28): error C2143: 语法错误 : 缺少“)”(在“类型”的前面) 1>e:\projects\proj4\proj4libtest\proj4\sizecount.c(28): error C2143: 语法错误 : 缺少“;”(在“类型”的前面) 1>e:\projects\proj4\proj4libtest\proj4\sizecount.c(28): error C2065: “i”: 未声明的标识符 1>e:\projects\proj4\proj4libtest\proj4\sizecount.c(28): warning C4552: “<”: 运算符不起任何作用;应输入带副作用的运算符 1>e:\projects\proj4\proj4libtest\proj4\sizecount.c(28): error C2065: “i”: 未声明的标识符 1>e:\projects\proj4\proj4libtest\proj4\sizecount.c(28): error C2059: 语法错误:“)” 1>e:\projects\proj4\proj4libtest\proj4\sizecount.c(28): error C2143: 语法错误 : 缺少“;”(在“{”的前面) 1>e:\projects\proj4\proj4libtest\proj4\sizecount.c(29): error C2065: “i”: 未声明的标识符 1>e:\projects\proj4\proj4libtest\proj4\sizecount.c(30): error C2065: “i”: 未声明的标识符 1>e:\projects\proj4\proj4libtest\proj4\sizecount.c(31): error C2065: “i”: 未声明的标识符 1>e:\projects\proj4\proj4libtest\proj4\sizecount.c(32): error C2065: “i”: 未声明的标识符 1>e:\projects\proj4\proj4libtest\proj4\sizecount.c(34): error C2043: 非法 break 明明没有问题啊
Lion.Kuo 2015-07-15
  • 打赏
  • 举报
回复
引用 5 楼 schlafenhamster 的回复:
"for(int i=0;.........." 在c中是错误的, c 中所有变量必须 先定义, c++ 中可以 边定义边使用.
虽然让我们组长给点播了, 你说的是对的
schlafenhamster 2015-07-15
  • 打赏
  • 举报
回复
"for(int i=0;.........." 在c中是错误的, c 中所有变量必须 先定义, c++ 中可以 边定义边使用.
赵4老师 2015-07-15
  • 打赏
  • 举报
回复
偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译,直到定位到具体语法出错的位置。” 的方法解决的。
make是在1977年在贝尔实验室(Bell Labs)研发的 Unix系统中的一款依赖关系检查工具程序(Utility software)。make的应用非常广泛,它被用来构建 C、C++ 、Pascal  Fortran 等项目,自动化构建生成可执行文件或者库文件。make通过读取Makefile文件以自动化建构软件, 它会根据依赖文件的修改时间进行判断。确定一个target的依赖关系,然后把生成这个target的相关命令传给shell去执行。GNU make 和大多数版本的 make 之间最重要的区别是 GNU make 是自由软件,常和GNU编译系统一起被使用,是大多数GNU Linux安装的一部分。GNU make 在 makefile 中具有许多强大的功能,超出了其他 make 版本的功能,它还可以重新生成、使用、然后删除不需要保存的中间文件。GNU make 还有一些非常方便的简单功能。例如,选项“假装源文件文件没有更改,即使它已更改。当您向文件添加新宏时,这非常有用。大多数版本的 make 都会假设它们必须重新编译所有使用文件的源文件,但是如果您知道对文件的更改不需要重新编译 GNU make 为您提供了一种避免重新编译的方法-o file 。 黄强老师针对零编程基础的同学,精心打磨make核心知识点,帮助你快速掌握Linux编程中的make的构建!适用人群: 零基础、新手、想快速学习Linux下C、C++编程的童鞋!
设备树(device tree)机制是Linux内核从linux-3.x版本开始引进的一种机制,目的是解决内核源码的arch/arm目录下代码混乱的问题:随着ARM生态的快速发展,在内核源码的arch/arm目录下,存放着几十种arm芯片和几百个开发板相关的源文件,很多开发板和处理器的中断、寄存器等相关硬件资源都在这个目录下以.c或.h的文件格式定义。而对于内核来说,与这些硬件耦合,会导致内核代码混乱不堪,每个开发板上运行的内核镜像都必须单独编译配置,无法通用。什么时候Linux内核能像Windows镜像那样,无论你的电脑什么配置,一个Windows安装包,都可以直接下载安装运行呢?设备树机制,实现了Linux内核和硬件平台的解耦:每个硬件平台的硬件资源使用一个设备树文件(xxx.dts)来描述,而不是在arch/arm下以.c 或 .h 文件来定义。Linux内核是一个通用的内核,在启动过程中,在通过解析设备树中的硬件资源来初始化某个具体的平台。 引入设备树后,很多和内核驱动开发的工作也发生了变化:以往驱动工程师关注的文件宏定义、寄存器定义,现在这些基本上不用关注,关注的重点则转向了如何根据硬件平台去配置和修改设备树文件。很多驱动的编程接口也发生了变化,开始慢慢使用device tree提供的编程接口去开发驱动。本期课程主要面向嵌入式开发人员,分享Linux下驱动开发所需要的设备树知识和必备技能

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧