不能在主文件中用include来包含子文件

写了一个inst.c文件:

/*======================================
// 函数名: inst
// 功能描述: 直接插入排序
// 输入参数: x 存放待排序数据的数组
//            n 数组长度
// 返回值: 无
//=======================================*/

void inst(int *x,int n)
{
 int i,j,t;
 for(i = 1; i < n; i ++)   /* i 表示插入次数, 共进行 n-1 次插入 */
 {
 t = x[i];
 for( j = i - 1; j >= 0; j --) /* 寻找要插入t的位置 */
    if(t < x[j])               /* 后移,空出位置 */
      x[j + 1] = x[j];
    else
      break;                   /* 找到位置时,退出循环*/
 x[j + 1] = t;                 /* 直接插入 */
 }
}

功能是用来进行插入排序。

写了一个shel.c文件:

/*============================================
// 函数名: shel
// 功能描述: 希尔排序
// 输入参数: x 存放待排序数据的数组
//            n 数组长度
// 返回值: 无
//==============================================*/
void shel(int *x,int n)
{
  int i,j,d,t;
  d = n/2;        /* 初始步长是 n/2 */
  while (d > 0)   /* 按不同步长进行排序 */
  {
  for(i = d; i < n; i ++)    /* 将x[i]插入到对应分组的合适位置中*/
  {
    t = x[i];
    j = i - d;
    while((j >= 0) && (x[j] > t)) /* 比较和移动 */
    {
    x[j + d] = x[j];
    j = j -d;
     }
   x[j + d] = t;
 }
 d = d/2;
 }
}

写了一个主文件inst0.c,用来包括inst.c,shel.c文件:

#include "stdio.h"
#include "inst.c"
#include "shel.c"

main()
{
 extern void inst(int *x, int n);
 extern void shel(int *x, int n);
 int i,j,p[50],p1[50];
 printf("Data:\n");
 for(i = 0; i < 5; i ++)
  {
   for(j = 0; j < 10; j ++)
    {
     p[10 * i + j] = 20 + 10*i -j; /*生成一些无序数据*/
     p1[10 * i + j] = p[10 * i + j];
     printf("%d  ",p[10 * i + j]);
    }
    printf("\n");
  }
  printf("Insert Sort:\n");    /* 直接插入排序的结果 */
  inst(p, 50);
  for ( i = 0; i < 5; i ++)
 {
    for( j = 0; j < 10; j ++)
       printf("%d   ", p[10*i + j]);
    printf("\n");
  }
  printf("Shell Sort:\n");      /* 希尔排序的结果 */
 shel(p1, 50);
 for(i = 0; i < 5; i ++)
 {
     printf("%d   ", p1[10*i + j]);
   printf("\n");
 }
}

此时进行编译:gcc -o   inst0 inst0.c inst.c shel.c,会报错:

/tmp/ccYEBSct.o: In function `inst‘:

inst.c:(.text+0x0): multiple definition of `inst‘

/tmp/ccNrTZCA.o:inst0.c:(.text+0x0): first defined here

/tmp/ccdZkuQl.o: In function `shel‘:

shel.c:(.text+0x0): multiple definition of `shel‘

/tmp/ccNrTZCA.o:inst0.c:(.text+0xa3): first defined here

collect2: error: ld returned 1 exit status

需要修改一下inst0.c文件:

去掉    #include "inst.c"

#include "shel.c"

两句,

再进行编译:

gcc -o inst0 inst0.c inst.c shel.c

会生成可执行文件:ints0,

执行该文件:./inst0

Data:

20  19  18  17  16  15  14  13  12  11

30  29  28  27  26  25  24  23  22  21

40  39  38  37  36  35  34  33  32  31

50  49  48  47  46  45  44  43  42  41

60  59  58  57  56  55  54  53  52  51

Insert Sort:

11   12   13   14   15   16   17   18   19   20

21   22   23   24   25   26   27   28   29   30

31   32   33   34   35   36   37   38   39   40

41   42   43   44   45   46   47   48   49   50

51   52   53   54   55   56   57   58   59   60

Shell Sort:

11   12   13   14   15   16   17   18   19   20

21   22   23   24   25   26   27   28   29   30

31   32   33   34   35   36   37   38   39   40

41   42   43   44   45   46   47   48   49   50

51   52   53   54   55   56   57   58   59   60

时间: 2024-12-28 21:04:30

不能在主文件中用include来包含子文件的相关文章

python判断字符串是否包含子字符串

python的string对象没有contains方法,不可以使用string.contains的方法判断是否包含子字符串,但是python有更简单的方法来替换contains函数 python的string对象没有contains方法,不可以使用string.contains的方法判断是否包含子字符串,但是python有更简单的方法来替换contains函数 python的string对象没有contains方法,不可以使用string.contains的方法判断是否包含子字符串,但是pyth

C++中#include包含头文件带 .h 和不带 .h 的区别

C++中#include包含头文件带 .h 和不带 .h 的区别? 如 #include <iostream> 和 #include <iostream.h> 包含的东西有哪些不同? 之前在写C++程序的时候只知道使用 #include <iostream> 的时候,使用函数前要用 using namespace std; 导入命名空间,而 #include <iostream.h> 则不用,这个得看C+ +标准化过程为C++开发者做了哪些有意义的工作. (

include包含头文件的语句中,双引号和尖括号的区别

include包含头文件的语句中,双引号和尖括号的区别 #include <>格式:引用标准库头文件,编译器从标准库目录开始搜索 #incluce ""格式:引用非标准库的头文件,编译器从用户的工作目录开始搜索 预处理器发现 #include 指令后,就会寻找后跟的文件名并把这个文件的内容包含到当前文件中.被包含文件中的文本将替换源代码文件中的#include指令,就像你把被包含文件中的全部内容键入到源文件中的这个位置一样. #include 指令有两种使用形式 #incl

JSP中的坑(二):使用include包含jsp文件时contentType中charset的值区分大小写

在JSP中<%@include file="" %>是比较常用的包含其他文件的一种手段,但是在使用时一不小心也会出错,如下代码: index.jsp: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//D

匹配所有不包含子元素或者文本的空元素

描述: 查找所有不包含子元素或者文本的空元素 HTML 代码: <table> <tr><td>Value 1</td><td></td></tr> <tr><td>Value 2</td><td></td></tr> </table> jQuery 代码: $("td:empty") 结果: [ <td>&

[ jquery 选择器 :empty ] 此方法选取所有不包含子元素或者文本的空元素

此方法选取所有不包含子元素或者文本的空元素: 实例: <!DOCTYPE html> <html lang='zh-cn'> <head> <title>Insert you title</title> <meta http-equiv='description' content='this is my page'> <meta http-equiv='keywords' content='keyword1,keyword2,k

分别应用include指令和include动作标识在一个jsp页面中包含一个文件。

hello.jsp <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+re

语句include和require的区别是什么?为避免多次包含同意文件,可用?语句来代替他们?

(1)include()在执行文件时每次都要进行读取和评估:require()文件只处理一次(实际上文件内容替换了require()语句) (2)require()通常放在PHP脚本程序的最前面include()的使用和require()一样,一般放在流程控制的处理区段中,PHP脚本文件读到include()语句时,才将它包含的文件读进来,这种方式,可以把程序执行时的流程简单化 (3)require()和include()语句是语言结构,不是真正的函数,可以像PHP的其他语言结构一样 (4)re

include包含头文件的语句中,双引号和尖括号的区别是什么?

include包含头文件的语句中,双引号和尖括号的区别是什么?  #include <> 格式:引用标准库头文件,编译器从标准库目录开始搜索 尖括号表示只在系统默认目录或者括号内的路径查找,通常用于包含系统中自带的头文件; 尖括号:在包含文件目录中去查找(包含目录是由用户在设置环境时设置的),而不在源文件目录去查找: #incluce "" 格式:引用非标准库的头文件,编译器从用户的工作目录开始搜索 双引号表示先在程序源文件所在目录查找,如果未找到则去系统默认目录查找,通常