易截截图软件、单文件、免安装、纯绿色、仅160KB

realview MDK C/C++ 混合编程问题

前几天搞一个项目涉及到C/C++混合编程,在Keil下编译时提示:
error: #800:this declaration may not have extern "C" linkage
error: At end of source : #67:expected a "}"
当时立马想到是C和C++编程时需要extern "C",马上试了试,然后宣告失败。
因为双击后提示出错的地方是template<clase T>,以为是keil不支持类模板造成的,于是查阅相关文档,一切的查阅结果证实keil是完全支持c++的,并且不需要太多的设置。
最后找出问题的元凶是靠一步步实验,建立新工程,测试是哪个文件的问题,最后将矛头直接指向"ch375fsbyte.h"头文件,然后又指向了"CH375HFM.H"这个头文件,最后发现是这个问题:
在CH375HFM前面有这样一段定义
#ifdef __cplusplus
extern "C" {
#endif
而在后面有这样一段定义
#ifdef __cplusplu
}
#endif
仔细的人估计已经看出来了。
前面条件编译是如果用到C++,则定义{,而后面条件编译是想说明如果用到C++,就定义},问题在哪里呢?就在后面那个条件编译的条件是cplusplu,而不是cplusplus这个。所有前面定义了{,而后面没有定义}。
自己这次的认识:
1:Keil是很完整的支持C++的
2:如果一个文件里面的{}不配套是有可能的,例如下面:
#define END_GLUMSG_MAP2() \
   if(bHandle) \
    return 0; \
   return 1; \
  }
意思是}为宏定义的一部分。\表示续行符。Keil也是支持的,但是还是会以红色标记它。
3:如果编译时提示错误,双击错误时,提示的地方不一定是案情的第一现场,也许真正的错误是在另一个地方。最有可能就是在包含的头文件里面,这已经不是我第一次遇到了.


相关文档:

C语言的一个简单算法: 26个字母随机步生成

一个简单的小程序, 原题目见<C语言程序设计-现代方法>第八章练习13.
由于自己只看到第八章, 所以, 不敢贸然使用函数等其他内容, 高手请放声大笑.
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define ROWS 10
#define COLS 10
/**
* @author: selfimpr
* @blog: http:// ......

综合运用C语言指针强制转换和回调函数


  
在这个例子里,回调函数比较两个值。查找函数向比较函数传递两个指向需要进行比较的值的指针,并检查比较函数的返回值。例如:零表示相等的值,现在查找函
数就与类型无关,因为它本身并不执行实际的比较。确实,调用者必须编写必需的比较函数,但这样做是很容易的,因为调用者知道链表中所包含的值的类型 ......

C++如何调用delphi制作的dll


一、概述及示例代码
Delphi中包括许多已经封装好的类及控件,其中的非可视化控件库以功能方式划分可处理诸多应用需求。若使用C++实现系统时对某些功能简单调用delphi中现成的库时即可。因此将delphi中的库以DLL形式封装好之后如何将方法导出可供C++调用是本文记录的重点。C++调用的方式有多种,在这里只讨论一种静 ......

汇编看c之一,简单函数调用

简单的函数调用,通过简单的函数调用反汇编可以清楚了解如下
1.栈到底是什么,如何操纵栈的?
2.参数和临时变量是以什么形式在哪存放?
3.如何传递返回值?
举例:
#include <stdio.h>
int add(int a,int b)
{
     int c=0;
     c=a+b;
     ......

Visual C++中的C运行时库浅析(lib dll)

Visual C++中的C运行时库浅析(lib dll)
一、历史
  C运行时库就是C run-time library,诞生于20世纪70年代,是C而非C++语言世界的概念,C程序运行时需要这些库中的函数。
  C语言是所谓的“小内核”语言,就其语言本身来说很小(不多的关键字,程序流程控制,数据类型等)。所以,C语言内核开发出来之后, ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号