今天在学习初级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. web worker技术-js新线程

    web worker的小例子,用来入门很合适,建议启动服务来开发.可以使用node的anywhere. <!DOCTYPE html> <html lang="en&quo ...

  2. mybase修改内部文件免费使用

    关于mybase的介绍就不多说了,下载后一般只有30天的使用期限.以下方法可以无限次使用该软件(当然,每隔一个周期就需要修改myBase.ini) 原文博客详见:https://www.cnblogs ...

  3. DIV命名规范

    DIV命名规范 企业DIV使用频率高的命名方法 网页内容类 --- 注释的写法: /* Footer */ 内容区/* End Footer */ 摘要: summary 箭头: arrow 商标:  ...

  4. vm中efi模式安装windows10

    选择dvd: 界面出现“Press any key to boot from CD or DVD”时,再迅速按下任意键就OK了.

  5. 腾讯云“动态加速”与“CDN”的区别——浅谈对“动态加速”的理解(可能有误)

    CDN的劣势及“动态加速”产生背景 通常CDN对静态内容支持较好,若使用其加速动态内容,可能会导致异常(如导致无法登录).当然,可以将动态内容的在CDN节点上的缓存时间设置为0秒来解决.但这毕竟是用户 ...

  6. OpenGL学习 Introduction

    OpenGL and Graphics Pipeline The word pipeline is from production lines in factories.Generating a pr ...

  7. 使用Excel调用ABAP系统的函数

    效果:在excel里创建一个按钮,开发一些VB script,可以连接指定的ABAP系统并执行系统里的ABAP function module. 在这里例子里执行ABAP系统的函数TH_USER_LI ...

  8. Jenkins配置(Jenkins如何与maven项目进行连用)

    一同事,在问关于Jenkins搭建后,他是如何与我们项目进行连用的,如何通过Jenkins去编译我们的项目的,现在介绍下如何通过Jenkins持续编译我们的项目 配置过程 1.确定我们已经搭建好了Je ...

  9. Poj(1789),最小生成树,Prim

    题目链接:http://poj.org/problem?id=1789 还是套路. #include <stdio.h> #include <string.h> #define ...

  10. 【[ZJOI2015]诸神眷顾的幻想乡】

    题目 听说这是广义\(SAM\)的板子 看来对于广义\(SAM\)我也就只会板子了 叶子数很少,所以可以枚举每一个叶子节点作为根建一遍\(Trie\)树 只需要对\(Trie\)树建出\(SAM\)就 ...