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”用法,布布扣,bubuko.com

时间: 2024-08-24 09:08:42

20140806 交换两个数 extern “C”用法的相关文章

用swap 交换两个数

#include<stdio.h>main(){ void swap(int *p1,int *p2);//定义swap函数,用于交换.  int *p,*q; int a,b; //定义两个指针变量和两个数a和b  printf("请输入两个数:");  scanf("%d,%d",&a,&b);//输入两个数  p=&a; q=&b;//将p和q分别指向a和b的地址  swap(p,q);//调用swap函数对p和q执

void swap(int a,int b)这样一个函数原型能交换两个数么?可以!!

昨天在指导别人指针的时候,突发奇想想到这么一道题,我觉得挺有意思的,发给大家看看,虽然不是什么很高级的技术,但是是个很有趣的思路..... 题目就是: void swap(int a,int b)这个函数原型,不能用全局变量与静态变量的情况下,怎么实现交换两个数? 如果你有兴趣可以思考一下,如果没兴趣就直接看下面的答案吧. --------------------------------------------------华丽的分割线-------------------------------

交换两个数的C语言程序

今天是第一次接触C语言,之前有一点C++的基础,所以学习起来还挺顺手的.下来分享一下写的一个关于交换两个数的C语言代码.可能这些还存在很大的问题,希望大家可以指正. 方法一:允许创建第三个变量 #include<stdio.h> int main() { int a=10; int b=20; int tmp=a; a=b; b=tmp; printf("%d\n",a); printf("%d\n",b); return 0; } 方法二:不创建新的变

异或交换两个数的陷阱【转】

前面我们谈到了,可用通过异或运算交换两个数,而不需要任何的中间变量. 如下面: void exchange(int &a, int &b) { a ^= b; b ^= a; a ^= b; } 然而,这里面却存在着一个非常隐蔽的陷阱. 通常我们在对数组进行操作的时候,会交换数组中的两个元素,如exchang(&a[i], &b[j]), 这儿如果i==j了(这种情况是很可能发生的),得到的结果就并非我们所期望的. void main() { int a[2] = {1, 

异或交换两个数;实现pow(int x, int y) ,即x的y次方

问题1:异或交换两个数 假设x=2:y=3,我们的目标是(没有蛀牙!!)交换x,y的值: 利用异或的特殊性:x^x=0 即两个相同数字异或后值为0: 解决: 令x=x^y=2^3 令y=x^y=x^y^y=2^3^3=2(此时x=x^y) 令x=x^y=x^y^2=2^3^2=3(此时x=x^y:y=2) 问题2:实现pow(int x, int y) ,即x的y次方 x的y次方就是有y个x连续乘机,代码如下: #include <stdio.h> #include <stdlib.h&

不使用中间变量交换两个数. 求平均数考虑溢出

#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> //不使用中间变量交换两个数的值 void exchange_num(int *a, int *b) { ①* a =*a + *b;    //适用范围广 * b = *a -* b; * a =* a - *b; ②* a = (*a )*(*b); * b = (*a )/(*b); * a = (*a ) / (*b);//当两个数有

如何不使用第三个变量来交换两个数的值

最近在看<c++从入门到精通>自学c++,里面有一道课后题是如何做到不适用第三个变量来交换两个数的值,以下是我在网上查找到的资料,记录下并作为笔记. 题目:a=10,b=15,将a / b的值互换. 通常我们的做法是(尤其是在学习阶段):定义一个新的变量,借助它完成交换.代码如下:      int a,b;      a=10; b=15;      int t;      t=a; a=b; b=t;      这种算法易于理解,特别适合帮助初学者了解计算机程序的特点,是赋值语句的经典应用

用多种方法交换两个数的值

今天上了C语言课,老师讲了有关交换两个数的问题.课后,经过自己的思考和总结,我得出了以下几种方法.虽然这个问题的方法还有很多,但我目前只了解到了这五种方法,希望大家多提建议和意见.其他的方法待补充奥... 法一: 大家最容易想的方法,首先设一个临时变量,利用临时变量将两个数交换.下面是实现它的代码: #include<stdio.h> int main() {   int num1=5,num2=10,tmp=0;   printf("before:\n");   prin

c语言函数实现交换两个数的值

代码: 1 #include <stdio.h> 2 3 void swap(int x,int y) 4 { 5 int temp; 6 7 temp = x; 8 x = y; 9 y = temp; 10 printf("In swap: x = %d,y = %d\n",x,y); 11 } 12 13 void swap_with_pt(int * x,int * y) 14 { 15 int temp; 16 17 temp = *x; 18 *x = *y;