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

首先:hello.c:

  

 hello.c:
#include<bool.c>
int main()
{
boo();
return ;
} bool.c:
#include<bool.h>
void boo()
{
printf("hello.c\n");
} bool.h
#include<stdio.h>
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文件,不会被加载进来,这时的声明相当于一个标签(或者标号),在第四步,链接时会通过这个标签去找相应的函数(前提是,包含这个函数的文件和主文件一起参加编译)。另外子文件也会进行那四步。

linux c 调用子文件函数的更多相关文章

  1. Linux C 调用MYSQL API 函数mysql_escape_string()转义插入数据

    Title:Linux C 调用MYSQL API 函数mysql_escape_string()转义插入数据 --2013-10-11 11:57 #include <stdio.h> ...

  2. python 如何调用子文件下的模块

    在python开发中,经常会出现调用子文件夹下的py模块 如上图,如果在test.py文件中,要调用meeting文件夹下面的huodongshu.py 模块, 直接在test.py 中 import ...

  3. JACOB调用控件函数

    背景介绍: 使用JAVA程序,实现对系统已安装控件方法的调用. JACOB下载地址:http://danadler.com/jacob/ 使用方法: 1.将jacob.jar添加到项目工程中 2.将j ...

  4. C#跨窗体调用控件(委托回调函数使用例子)

    问题: 有两个窗体,FORM1(含一个label控件,一个名为显示form2的button控件)和FORM2(含一个button控件).启动时,FORM1中点击button控件显示form2使FORM ...

  5. Linux C 读取文件夹下所有文件(包括子文件夹)的文件名【转】

    转自:https://www.cnblogs.com/xudong-bupt/p/3504442.html 本文:http://www.cnblogs.com/xudong-bupt/p/350444 ...

  6. linux字符设备驱动中内核如何调用驱动入口函数 一点记录

    /* 内核如何调用驱动入口函数 ? *//* 答: 使用module_init()函数,module_init()函数定义一个结构体,这个结构体里面有一个函数指针,指向first_drv_init() ...

  7. linux 将子文件夹的文件复制到 当前目录中

    linux 将子文件夹的文件复制到 当前目录中,如 目录结构大概是 -sh |__ db_backup |___ test |____ 2018_01_01_00_00_00 |_____ 2018_ ...

  8. Android程序函数 将assets文件夹下的文件复制到手机的sd卡中(包括子文件夹)

    最近在做个功能是将asset文件夹下的所有文件(包括子文件)全部拷贝出来到指定目录下.所用的方法无非是用AssetManager.但是这里 有个问题是也要讲子文件夹和子文件都要拷贝出来.到网上Goog ...

  9. linux修改文件夹及其子文件夹的权限

    加入-R 参数,就可以将读写权限传递给子文件夹例如chmod -R 777 /home/mypackage那么mypackage 文件夹和它下面的所有子文件夹的属性都变成了777.777是读.写.执行 ...

随机推荐

  1. Python列表边遍历边修改问题解决方案:alist[:]

    最近在看python,遇到个简单的问题:删除列表中指定的重复元素,发现一些实用并且有趣的东西. 1.错误示范 alist = [1,1,2,2,3,3,2,2,1,1] for i in alist: ...

  2. canvas绘制阴影

  3. int **a 和 int (*a)[]的区别

    关于理论知识隔壁们的教程说的很详细了我就不多赘述了.我这边主要贴一段代码来看看这两种东西使用上的区别到底在哪. #include <stdio.h> int main(int argc, ...

  4. Android开发由eclipse转Android Studio中一些常见出错问题解决方法

    1.给一个Activity添加了一个Dialog主题,结果出现了下面的问题,在eclipse却没有出错 <activity android:name=".DialogActivity& ...

  5. android 屏幕单击位置测试

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools= ...

  6. Mautic-2.2.0 (Ubuntu 16.04)

    平台: Ubuntu 类型: 虚拟机镜像 软件包: mautic-2.2.0 business intelligence commercial ecommerce mautic open-source ...

  7. php的yii框架开发总结3

    利用yii里面的gii工具可以很容易的自动创建数据表相应的的CURD操作的基于MVC的文件: 首先,打开:自己网站/protected/config/main.php文件 'modules'=> ...

  8. Vsftpd服务传输文件(转)

    本章节先通过介绍文件传输协议来帮助读者理解FTP协议的用处,安装vsftpd服务程序并逐条分析服务文件的配置参数. 完整演示vsftpd服务匿名访问模式.本地用户模式及虚拟用户模式的配置方法,介绍PA ...

  9. caffe RandomBrightness和RandomContrast

    1. void RandomBrightness(const cv::Mat& in_img, cv::Mat* out_img, const float brightness_prob, c ...

  10. redis 对cmd的操作

    这个是原子递增的知识点: 关于list部分: 利用lpush命令, rpush命令, lrange命令,对列表操作 此前 我已经 在列表(list)中 插入了 部分 元素了 关于集合set 部分 首先 ...