c语言中,一个程序A怎么控制另一个程序B运行。

c语言中,一个程序A怎么控制另一个程序B运行。,第1张

这在C中很容易实现。

一、将A中的数据作为调用函数B的参数,经过B处理后,返回到A。假定A为主函数main(),B为排序函数Sort(int a[],int n),在A中给数组a[]赋值,通过函数B进行排序,完成后返回到A。

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#define MAXlen 100

void Sort(int *x, int n) {     //选梁旦手择排序

int i, j, min

int t

for (i = 0 i < n - 1 i++) {     // 要选择的次数:0~n-2共n-1次 

min = i                      迟饥// 假设当前下标为i的数最小,比较后再调整 

for (j = i + 1 j < n j++) { //循环找出最小的数的下标是哪个

if (*(x + j) < *(x + min)) {   

min = j              // 如果后面的数比前面的小,则记下它的下标

}

}  

if (min != i) {               // 如果橡嫌min在循环中改变了,就需要交换数据

t = *(x + i)

*(x + i) = *(x + min)

*(x + min) = t

}

}

}

int main() {

int i

int iArr[MAXlen]

srand((unsigned int)time(NULL))

printf("\n排序前:\n")

for(i = 0  i < MAXlen  i++) {

iArr[i] = (unsigned int)rand() % 1000

if(i % 10 == 0) printf("%\n")

printf("%5d",iArr[i])

}

printf("\n")

Sort(iArr,MAXlen)

printf("\n排序后:\n")

for(i = 0  i < MAXlen  i++) {

if(i % 10 == 0) printf("%\n")

printf("%5d",iArr[i])

}

printf("\n\n")

return 0

}

使用库函数 system(), 它的功能正是所要的。注意, 系统返回的值最多是命令的退出状态值 (但这并不是一定的), 通常和命令的输出无关。还要注意,system() 只接受一个单独的字符串参数来表述调用程序。如果要建立复杂的命令行, 可以使用 sprintf()。根弯者早据使用的系统, 也许还可以使用系统函数, 例如exec 或埋雀 spawn (或execl,嫌罩execv, spawnl, spawnv 等)。

C++和C是两种完全不同的编译链接处理方式如衫,如果直接在C++里面调用C函数,会找不到函数体,报链接错误。要解决这个问题,就要在 C++文件里面显示声明一下哪些函数是C写的,要用C的方式来处理。

1.引用头文件前需要加上 extern “C”,如果引用多个,那么就如下所示

extern “C”

{

#include “ s.h”

#include “t.h”

#include “g.h”

#include “j.h”

}

然后在调用这些函数之前,需要将函数也全部声明一遍。

2.C++调用C函数的方法,将用到的冲橡瞎函数全部重新声明一遍

extern “C”

{

extern void A_app(int)

extern void B_app(int)

extern void C_app(int)

extern void D_app(int)

}

C++程序中调用被c编译器编译后的函数,为什么要加extern "C"?

C++语言支持函数重载,C语言不支持函数重载。函数被C++编译后在库中的名字与C语言的不同。假设某个C 函数的声明如下:

void foo(int x, int y)

该函数被C 编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字用来支持函数重载和类型安全连接。由于编译后的名字不同,C++程序不能直接调用C 函数。C++提供了一个C 连接交换指定符号extern“C”来解决这个问题。例如:

extern “C”

{

void foo(int x, int y)

// 其它函数

}

或者写成

extern “C”

{

#include “myheader.h”

// 其它C 头文件

}

这就告诉C++编译译器,函数 foo 是个C 连接,应该到库中找名字_foo 而不是找_foo_int_int。C++编译器开发商已经对C 标准库的头文件作了extern“C”处理,所以我散空们可以用#include 直接引用这些头文件。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12303750.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存