20140806 交换两个数 extern “C”用法
1、交换两个数
方法1、a+b有可能越界
a=a+b;
b=a-b;
a=a-b;
方法二、不会越界
a=a^b
b=a^b;
a=a^b;
2、extern “C”用法
(
自己总结:
1、C++语言引用C语言函数时(void fun(int a,int b),void fun(int a,float b)),由于C++有重载功能,编译器按C++的方式编译该函数后产生的名字五花八门(_fun_int_int和_fun_int_float)。
2、而被调用的c语言函数库,或者.c文件生成的.obj文件中函数的名字只有一个(_fun)。
3、这样,c++模块在调用void fun(int a,int b)时,就会以_fun_int_int的名字在c函数库(.dll文件)和.obj中匹配,但是这两个中的函数的名字却是_fun,所以就找不到该函数,也就无法调用了。
)
(1)在C++中引用C语言中的函数和变量(叶的理解:应该是调用.dll时吧),在包含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); //注:写成extern "C" int add(int , int ); 也可以
#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" } //注:此处不妥,如果这样编译通不过(叶的理解:原因是函数实现在.c文件,不是.DLL)。换成 extern "C" int add(int , int ); 可以通过。
int main(int argc, char* argv[])
{
add(2,3);
return 0;
}
如果C++调用一个C语言编写的.DLL时,当包括.DLL的头文件或声明接口函数时,应加extern "C" { }。
20140806 交换两个数 extern “C”用法的更多相关文章
- c语言实现交换两个数的值
C语言中要实现交换两个数的值,可以有很多种方法,具体如下所述. 不使用中间变量: // 异或, a^=b^=a^=b; a ^= b; b ^= a; a ^= b; // 加减 a = a + b; ...
- 实现pow(int x, int y),即x的y次方 ; 异或交换两个数;
问题1:实现pow(int x, int y) ,即x的y次方 x的y次方就是有y个x连续乘机,代码如下: #include <stdio.h> #include <stdlib.h ...
- Qt_C++交换两个数
在编程过程中,交换两个数是我用常用的 ,这里做下简单的搬运 bool Widget::swap(int a, int b) { int temp =a; a= b; b = temp; } 这种方式其 ...
- C语言交换两个数的值
#include<stdio.h> int main() { //交换两个数的值 // 方法一 可读性最好 ; ; int temp ; temp = a; a = b; b = temp ...
- 几种交换两个数函数(swap函数)的写法和解析
#include <iostream> using namespace std; /*值传递,局部变量a和b的值确实在调用swap0时变化了,当结束时,他们绳命周期结束*/ void sw ...
- java中不创建使用第三方变量,交换两个数的值
1.直接使用算术运算法交换 先把两个数的和赋值给其中一个,然后做减法.例如num1=num1+num2; 此时num2(交换之后)就等于num1减去num2:废话不多说,直接上代码 public cl ...
- 交换两个数-c++实现
今天看了下交换数值的小程序,网上挺多的,整理了下,,因为参考较多,没一一给出链接,若原作者看到,可以留言,我会添加 // example_1_6_function_swap.cpp : 定义控制台应用 ...
- php不用第三个变量,交换两个数的值
//字符串版本 结合使用substr,strlen两个方法实现 $a="a"; $b="b"; echo '交换前 $a:'.$a.',$b:'.$b.'< ...
- c语言函数实现交换两个数的值
代码: #include <stdio.h> void swap(int x,int y) { int temp; temp = x; x = y; y = temp; printf(&q ...
随机推荐
- input file转base64
不想用canvas转 <input type="file" id="file" accept="image/*" onchange=& ...
- ajaxfileupload上传文件出现SyntaxError:unexpected token <错误
function ajaxFileUpload() { $.ajaxFileUpload ( { url: uri, secureuri: false, fileElementId: 'upFile' ...
- mysql 针对table的查看命令行
1 desc t_help; 2 show create table t_help; 3 show table status like 't_help';
- 一个完整实用的axios封装
1.先引入 import axios from 'axios' import qs from 'qs'import router from '../router'; import store from ...
- Java删除过期文件
public static void main(String[] args) throws IOException { long cut = LocalDateTime.now().minusWeek ...
- Cobalt Strike特征修改
一.Teamserver模块端口信息 vim teamserver修改Cobalt Strike默认服务端50500端口为其他任意端口 二.SSL默认证书信息 Cobalt Strike默认SSL证书 ...
- Linux——用户及文件权限管理
2019-07-31 用户管理 查看用户 who am i:打开当前伪终端的用户的用户名 pts/0 后面那个数字就表示打开的伪终端序号,你可以尝试再打开一个终端,然后在里面输入 who am i , ...
- shell 编程四剑客简介 find sed grep awk(微信公众号摘抄)
一,Shell编程四剑客之Find 通过如上基础语法的学习,读者对Shell编程有了更近一步的理解,Shell编程不再是简单命令的堆积,而是演变成了各种特殊的语句.各种语法.编程工具.各种命令的集合. ...
- webpack output.publicPath
output.publicPath string function 对于按需加载(on-demand-load)或加载外部资源(external resources)(如图片.文件等)来说,outpu ...
- mysql莫名报"unknown column ... in 'on clause'"
今天遇见个会诡异的问题 一个web程序本地调试的好好的,结果发布到服务器上程序就报错了,报"unknown column ... in 'on clause'",网上搜了下,说是m ...