• linux c 调用子文件函数


    今天在学习初级linux c的时候遇到了如下问题:通过主函数调用同路径下的子文件函数调用失败。博主是这样一一解决的:

    首先:hello.c:

      

     1 hello.c:
     2 #include<bool.c>
     3 int main()
     4 {
     5     boo();
     6    return 0; 
     7 }
     8 
     9 bool.c:
    10 #include<bool.h>
    11 void boo()
    12 {
    13    printf("hello.c
    "); 
    14 }
    15 
    16 bool.h
    17 #include<stdio.h>
    18 void boo();

      这里gcc hello.c 会提示这样的错误:no such file or directory。之后博主查阅相关资料发现,在include语句中,"<>" 表示在标准路径中搜索头文件,在Linux中默认为"/usr/include"。故将#include<bool.c>改为 #include"bool.c"就可以了,那个#include<bool.h>也需要改。如果不这样改动,需要用这样的命令编译  gcc hello.c -I(大写i)<当前路径>来编译才会正常。这里的 I 是用来向编译器指明非默认地址下的头文件路径。

    还有一个问题:如果在主函数文件中直接包含bool.h头文件,会找不到boo()函数。这个问题还没有解决。

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    问题已解决:2018.6.28

    直接包含bool.h头文件,bool.c并为参加编译,故,声明了void boo()  但是找不到boo函数原码。编译代码分为:1.预处理,2.编译,3.汇编,4.链接

    1.采用#include<bool.c> 这个实在预处理的时候将bool.c中得所有代码都加进hello.c中的,故其可编译执行

    2.如果没有#include<bool.c>,只是#include<bool.h>,这是用gcc hello.c -o hello 去编译文件,并未将bool.c编译进去,此时编译可执行1,2,3,步,但是执行到第4步的时候,链接不到应执行的函数(就是bool没有编进机器码,找不到其地址,相当于不存在此函数的二进制执行码),故会提示找不到boo()函数。不过gcc hello.c bool.c -o hello这样讲bool.c编译进去就可以了 

    -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    2018.7.8

    今天,在c调用子文件,又有了点收获。

    在include中的文件在,预处理时会加入进本文件,文件里的一些声明也会被加进来,注意只是声明。函数本体还在其他.c文件,不会被加载进来,这时的声明相当于一个标签(或者标号),在第四步,链接时会通过这个标签去找相应的函数(前提是,包含这个函数的文件和主文件一起参加编译)。另外子文件也会进行那四步。

  • 相关阅读:
    【题解】字母 (letter)
    【题解】【原创题目】薇尔莉特
    【题解】Query on a tree III [SP1487] [Bzoj1803]
    11个炫酷的 Linux 终端命令
    A light-weight client-side OAuth library for Java
    android下的异步任务
    OAuth相关知识
    显示单位px、dip以及sp的区别
    Arduino连接SHT10温湿度传感器--返回值不正常解决办法
    blueterm蓝牙超级终端(源码)
  • 原文地址:https://www.cnblogs.com/jiaan/p/9234139.html
Copyright © 2020-2023  润新知