`
bbls
  • 浏览: 63578 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

.c与.cpp文件的一点区别

阅读更多

在编译源文件时,C编译器和C++编译器都会对符号(函数或变量)名作某些修正,但两者采用的修正方法不同,所以两者生成的目标文件不能互相链接。在C++中使用extern "C"可以让C++符号获得C链接特性。由于C++编译器会自动定义__cplusplus宏,所以在C语言头文件中采用这种结构可以保证无论使用何种编译器,生成的目标文件都具有C链接特性,能够与标准C编译器所生成的目标文件相链接。

通常c/c++编译器会根据文件后缀来选择符号修正,所以最好把c的代码放到.c文件中,把c++的代码放到.cpp文件中。

我用VC++6.0创建动态库,做了以下试验。

在test.cpp中输出c函数,如下:
1、新建Win32 Dynamic-Link Library
2、输出函数
extern "C" _declspec(dllexport) void far test();

void far test()
{
 
}

而在test.c中输出c函数,就可以这样,如下:
1、新建Win32 Dynamic-Link Library
2、输出函数
_declspec(dllexport) void far test();

void far test()
{
 
}

看来.c和.cpp还是有很大区别的

分享到:
评论

相关推荐

    .c文件和.cpp文件互访示例

    在C++编程中,`.c` 文件通常代表纯C语言源代码,而`.cpp` 文件则代表C++源代码。由于C++是C语言的超集,因此它们之间可以进行互访,即C代码可以调用C++编译的函数,反之亦然。这种互访在某些情况下非常有用,比如在...

    Problem Day2.pdf

    - 文件中提及的"count.pas/c/cpp"表明可以使用Pascal、C或者C++等编程语言来编写解决方案。 - 这些语言在算法竞赛中很常见,因为它们提供了良好的控制结构,能够进行高效的内存管理。 6. 数据结构 - 解决算法...

    linux的ubuntu上如何编译C和C++代码写的动态库,以及调用执行

    2. `testc.c`:C语言实现文件,包含了`TestC`函数的定义。 3. `testcpp.h`:C++头文件,声明了一个名为`TestCPP`的函数。 4. `testcpp.cpp`:C++实现文件,包含了`TestCPP`函数的定义。 5. `main.cpp`:主程序文件,...

    makefile编写

    Makefile 是一种用于自动化构建软件项目的脚本文件,它基于特定的规则和语法,与 `make` 工具配合使用,帮助开发者简化编译过程,提高开发效率。在软件开发过程中,项目通常包含大量的源代码文件,如果每次都需要...

    HTML_PHP_CPP.rar_php cpp_php_c

    描述"html php调用cpp程序的具体实现步骤"进一步证实了这一点,它提示我们将探讨一个具体的过程,即如何在HTML页面通过PHP脚本与C++程序进行交互。 首先,我们要理解HTML(HyperText Markup Language)是用于创建...

    adfview_src_Windows编程_

    3. **Folder.cpp**:可能处理与文件夹相关的操作,比如遍历目录结构,找到ADF文件等。 4. **FileOp.cpp**:可能涉及文件操作,如打开、读取和解析ADF文件,可能还包括文件的保存和复制等。 5. **DragDrop.cpp**:...

    cppcheck操作文档

    cppcheck可以轻松实现这一点: ``` cppcheck path ``` 如果"path"是一个文件夹,那么cppcheck将会检查该文件夹下的所有源文件。 ##### 2.3 排除文件或文件夹 有时可能需要排除某些特定文件或文件夹不进行检查,...

    Dev-cpp安装包

    3. **创建项目:**在Dev-Cpp中,可以通过菜单栏选择“文件”->“新建”->“项目”来创建一个新的C或C++项目。填写项目名称,选择存储位置,然后可以选择项目类型(如控制台应用程序、静态库等)。 4. **编写代码:**...

    cppcheck的是用手册

    cppcheck是一款专注于C/C++代码分析的强大工具,它的独特之处在于它不检测语法错误,这一点与传统的C/C++编译器和其他分析工具有所不同。cppcheck的目标是检测那些通常被编译器忽略的潜在缺陷,力求减少误报率,确保...

    acm.rar_1048_ACM_acm 答案_visual c

    标题中的"acm.rar_1048_ACM_acm 答案_visual c"表明这是一个与ACM(国际大学生程序设计竞赛,International Collegiate Programming Contest)相关的压缩包,其中包含的是使用Visual C++编写的解答代码。"1048"可能...

    C++练习.tar.gz

    标题 "C++练习.tar.gz" 暗示这是一个包含C++编程练习的压缩文件,而描述中的信息同样简明地确认了这一点。这个压缩包很可能包含了一些用于学习或测试C++编程技能的源代码文件。从提供的文件列表来看,我们有五个C++...

    CPP_ex.rar_ex

    标题中的"CPP_ex.rar_ex"表明这是一个与C++编程语言相关的压缩文件,可能包含了示例代码或项目。描述中提到的"c++ examples sourcecode"进一步证实了这一点,它告诉我们这个压缩包里面装的是C++的示例源代码,可能是...

    CDataFile_demo.zip_C csv 数据_C++读取csv数据_C++读取csv文件_csv read_csv

    "C++读取csv数据"和"csv_read"标签进一步证实了这一点,它涉及到用C++编程语言读取CSV文件内容。 "CSV_Reader_Demo"是项目的核心部分,包含了一系列源代码文件,如".cpp"和".h"文件,它们共同实现了CSV文件的读取...

    ASM汇编软件RadASM(汇编编译器) 2.2.1.9 汉化版_20161223.zip

    的一些工程一并删除,请谨慎使用卸载(默认在Masm和Cpp中新添加的工程不会被删除,但还是小心一点 比较好)。若必须要卸载的话,请把你安装后新建的工程及配置文件备份到其它目录,再执行卸载! 2、这个版本我去掉了...

    bmp简单验证码程序.cpp

    bmp简单验证码程序.cpp 简单验证码是指验证码图片里的字符,固定不变,或者变化很小的验证码,比如:字符上会有一些干扰点干扰线等情况,或者只有少数几种字体变化和字体大小变化。 这里给出源代码都是非常简单的...

    源程序,源程序是什么意思,C,C++源码.zip

    在C和C++项目中,可能有头文件(如.h或.hpp)和实现文件(如.c或.cpp)。头文件通常包含函数原型、类声明和其他接口定义,而实现文件则包含具体的函数实现和类的成员函数。 当源程序准备编译时,开发人员会使用...

    java调cpp_os.zip

    6. **调用约定**: C/C++的函数调用约定可能与Java不同,因此在编写本地方法时需要注意这一点。JNI提供了不同的调用约定,如`JNIEXPORT`和` JNICALL`宏,以确保正确地与Java虚拟机交互。 7. **数据类型映射**: Java...

    C语言实现校园导游咨询系统源码

    - `database.c/cpp`:数据库操作的代码,可能包括查询和更新功能。 - `error_handling.c/cpp`:错误处理模块。 - `utils.c/cpp`:通用工具函数,如输入验证、字符串处理等。 通过分析这些文件,我们可以了解到系统...

    cpp-纯C捕鱼游戏

    - 存储和读取状态:游戏进度的保存和读取需要用到文件I/O,C语言提供了标准库函数来实现这一点。 - 得分系统:得分系统通常涉及变量的增减和高分榜的维护,这需要理解基本的数据类型和控制结构。 4. **事件处理与...

    cpp-jsonparser用可移植的ANSIC编写的JSON解析器占用内存非常少

    `cpp-jsonparser`就是这样一个库,它是一个用可移植的ANSI C编写的JSON解析器,特别强调了低内存占用。 该解析器的设计目标是简洁和高效,使得开发者可以在资源受限的环境中(如嵌入式系统)或者对性能有高要求的...

Global site tag (gtag.js) - Google Analytics