社区
C++ 语言
帖子详情
C++程序中如何使用.c文件
海流风光
2011-07-28 10:07:35
我想写一个C++程序,不过要用到别人用C语言写的代码,很多的.h文件和.c文件,我该如何调用这些东西并能编译通过。谢谢大家帮忙了啊!
...全文
452
12
打赏
收藏
C++程序中如何使用.c文件
我想写一个C++程序,不过要用到别人用C语言写的代码,很多的.h文件和.c文件,我该如何调用这些东西并能编译通过。谢谢大家帮忙了啊!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Jokul_Lee
2011-07-28
打赏
举报
回复
[Quote=引用 6 楼 zhao4zhong1 的回复:]
也可以在所有.h和.c文件的开头加
extern "C" {
末尾加
}
[/Quote]那样就能正常使用了么?
赵4老师
2011-07-28
打赏
举报
回复
也可以在所有.h和.c文件的开头加
extern "C" {
末尾加
}
moheng1
2011-07-28
打赏
举报
回复
在当前的解决方案里再新建一个工程,把c代码的文件都加进去,然后在工程属性里-常规-配置类型中选择“静态库(.lib)”,然后在你的c++工程的项目依赖项中加入c的工程名,并把c++工程设为启动项就可以了
ouyh12345
2011-07-28
打赏
举报
回复
设置不需要预编译头文件
海流风光
2011-07-28
打赏
举报
回复
我的已经设置成编译成C代码了,可是出现C1853错误。[Quote=引用 2 楼 ouyh12345 的回复:]
直接把文件加入到工程,并把c文件设置为“编译成c代码”
[/Quote]
ouyh12345
2011-07-28
打赏
举报
回复
直接把文件加入到工程,并把c文件设置为“编译成c代码”
ryfdizuo
2011-07-28
打赏
举报
回复
把.c编译成lib
xiaobaihongye404
2011-07-28
打赏
举报
回复
11楼回答的很详细了
丢丢妹
2011-07-28
打赏
举报
回复
在C++中引用C语言中的函数和变量,在包含C语言头文件(假设为cExample.h)时,需进行下列处理:
extern "C"
{
#include "cExample.h"
}
而在C语言的头文件中,对其外部函数只能指定为extern类型,C语言中不支持extern "C"声明,在.c文件中包含了extern "C"时会出现编译语法错误。
笔者编写的C++引用C函数例子工程中包含的三个文件的源代码如下:
/* c语言头文件:cExample.h */
#ifndef C_EXAMPLE_H
#define C_EXAMPLE_H
extern int add(int x,int y);
#endif
/* c语言实现文件:cExample.c */
#include "cExample.h"
int add( int x, int y )
{
return x + y;
}
// c++实现文件,调用add:cppFile.cpp
extern "C"
{
#include "cExample.h"
}
int main(int argc, char* argv[])
{
add(2,3);
return 0;
}
如果C++调用一个C语言编写的.DLL时,当包括.DLL的头文件或声明接口函数时,应加extern "C" { }。
hzy694358
2011-07-28
打赏
举报
回复
在include 头文件的时候加
extern "C" {
include "a.h"
……
}
至善者善之敌
2011-07-28
打赏
举报
回复
未加extern "C"声明时的连接方式
假设在C++中,模块 A的头文件如下:
// 模块 A头文件 moduleA.h
#ifndef MODULE_A_H
#define MODULE_A_H
int foo( int x, int y );
#endif
在模块 B中引用该函数:
// 模块 B实现文件 moduleB.cpp
#include "moduleA.h"
foo(2,3);
实际上,在连接阶段,连接器会从模块 A生成的目标文件 moduleA.obj中寻找_foo_int_int这样
的符号!
加extern "C"声明后的编译和连接方式
加extern "C"声明后,模块 A的头文件变为:
// 模块 A头文件 moduleA.h
#ifndef MODULE_A_H
#define MODULE_A_H
extern "C" int foo( int x, int y );
#endif
在模块 B的实现文件中仍然调用foo( 2,3 ),其结果是:
(1)模块 A编译生成 foo的目标代码时,没有对其名字进行特殊处理,采用了 C语言的方式;
(2)连接器在为模块 B的目标代码寻找foo(2,3)调用时,寻找的是未经修改的符号名_foo。
如果在模块 A中函数声明了 foo为 extern "C"类型,而模块 B中包含的是 extern int foo( int x,
int y ) ,则模块 B找不到模块 A中的函数;反之亦然。
所以,可以用一句话概括extern “C”这个声明的真实目的(任何语言中的任何语法特性的诞生
都不是随意而为的,来源于真实世界的需求驱动。我们在思考问题时,不能只停留在这个语言是怎么
做的,还要问一问它为什么要这么做,动机是什么,这样我们可以更深入地理解许多问题):
实现C++与 C及其它语言的混合编程。
海流风光
2011-07-28
打赏
举报
回复
那我的.h文件怎么弄啊?是只导入.cpp文件吗?[Quote=引用 5 楼 moheng1 的回复:]
在当前的解决方案里再新建一个工程,把c代码的文件都加进去,然后在工程属性里-常规-配置类型中选择“静态库(.lib)”,然后在你的c++工程的项目依赖项中加入c的工程名,并把c++工程设为启动项就可以了
[/Quote]
C与
C++
高级图形
程序
设计完整版
C与
C++
高级图形
程序
设计完整版 内容摘要: 附录与关键词: 计算机图形学
程序
设计
程序
设计 计算机图形学 全文目录 目录 为什么要阅读本书 前言 第一章 数学模块 鸣谢 第一部 分通用
程序
第二章 图形界面模块 第三章 如何
使用
模块 第四章 实体建模理论和数据库结构 第五章 给画面增加物体 第六章 在屏幕上排序和显示物体 第七章 Model.c描述
文件
生成
程序
第八章 3-D建模
程序
第九章 生成物体的数据库 第十章 生成画面
文件
第十一章 Z缓冲理论和数据库结构 第十二章 描述
文件
生成器DesMake.c 第十三章 Z缓冲描绘
程序
第十四章 生成并
使用
Z缓冲区数据库 第十五章
使用
分形
程序
生成数据库 第十六章 光线跟踪技术基础 第十七章 高分辨率图形 第十八章 定义画面的.RT
文件
第十九章 光线跟踪
程序
第二十章 显示光线跟踪
文件
附录A实体建模画面定义
文件
附录B光线跟踪
中
使用
的材料
C语言大全第4版+源码(PDF)
本书是“C:The Complete Beference”的第四版。在第一版问世以来的几年
中
,
程序
设计领域已经发生了很大变化。Internet和World Wide Web已成为计算领域一道亮丽的风景,Java已经开发出来,
C++
也已标准化。与此同时,新的C标准(称为C99)也已制订。尽管C99并没有被大肆炒作,但它确实是过去5年里计算领域
中
最重要的一个事件。在历史的洪流
中
,人们很容易只注意那些新的事物,而忽视了用以构筑未来的坚实基础。C语言正是这样的基础。世界上的许多
程序
代码是在C上运行的。
C++
正是在此基础上建立的,其语法构成了Java的基础。然而,如果C仅是其他语言的起点,它就会成为有趣但却遭到遗弃的语 注: 原
文件
大小:15499 KB
C++
程序
中
添加.c.h的方法
方法一、1、把要添加的.c和.h
文件
复制到
c++
程序
目录
中
。2、把.c
文件
改为.cpp
文件
3、把.c.h
文件
都添加到该项目
中
就可以
使用
了方法二、1、项目配置不
使用
预编译头2、.c
文件
加载到
程序
需
中
3、把c语言函数的声明用extern "C"{};
中
。现在最好的写法是://test.h#ifdef __cplusplusextern "C" {#endif//c语言函数声明写在这#ifdef __...
C
程序
保存为.c
文件
和.cpp
文件
的区别
在学习数据结构时,看到老师把C语言和
C++
混用,并将
文件
保存为.cpp类型。关于.c
文件
和.cpp
文件
的区别,以下是我的一点看法: 1.首先应该明白,
C++
是在C语言的基础上拓展而来的,因此
C++
的语法完全兼容C的语法。 2.一般来说,如
文件
后缀为.cpp,则编译器默认采用
C++
语法标准进行编译;如
文件
后缀为.c,则编译器默认采用C语法标准进行编译。 3.由于
C++
兼容C,因此C语言
程序
既可...
C/
C++
语言
中
.h
文件
和.c
文件
详细解析 引用 .c和.h
文件
的区别
预处理是编译器的前驱,作用是把存储在不同
文件
里的
程序
模块集成为一个完整的源
程序
. #include本身只是一个简单的
文件
包含预处理命令,即为把include的后面
文件
放到这条命令这里,除此之外,没有其它的用处(至少我也样认为). 我对乾坤一笑兄的观点,十分赞同,基础的东东一定要弄明白. 我下面就乾坤一笑兄的例子做讲,完备他的一些让人迷惑不解的时候~ 例子: //a.h vo
C++ 语言
64,646
社区成员
250,476
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章