今天在学习初级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. js屏蔽鼠标操作

    document.body.onselectstart=document.body.oncontextmenu=function(){ return false;}

  2. appium(二)简单的demo

     转自http://blog.csdn.net/Yejianyun1/article/details/55517418     启动appium服务,连接手机,将测试用例demo存放到.py文件中 # ...

  3. 心得整理之一--RDLC多数据源多表

    我将项目中的一部分提炼出来,写了这个Demo. 先说一下需求, 从 API接口, 获取数据源, 调用RDLC 生成PDF文件. (后面还有涉及到使用福昕PDf阅读器进行设置文件自定义内容,以供外部程序 ...

  4. java之Socket传递图片

    客户端: package client; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ...

  5. Jmeter入门5 关联 响应数据传递-正则表达式提取器

    在测试过程中,遇到一个问题:用户登录成功后服务器会返回一个登录凭证,之后所有的操作都需要带上此凭证.我们怎么获取登录凭证并传递给后续的操作? Jmeter提供了正则表达式提取器,用变量提取参数,后续通 ...

  6. 动态原型模式 js

    动态原型模式 function Person(name,age){ this.name = name; this.age = age; if(typeof this.sayName != " ...

  7. Linux常用命令之文件和目录操作命令

    以下是linux操作系统常用的文件和目录操作命令: cd /home 进入 '/ home' 目录'  cd .. 返回上一级目录  cd ../.. 返回上两级目录  cd 进入个人的主目录  cd ...

  8. centos 7 iptables基本配置

    安装iptable iptable-service #先检查是否安装了iptables service iptables status #安装iptables yum install -y iptab ...

  9. httpclient开启代理,获取java中请求的url

    背景:在httpclent做post或者get请求时,请求返回的数据总是和预想的不一致,但是有不知道怎么排查问题,经同事说httpclient可以设置代理,就可以获取请求前数据的一些问题,帮助我排查问 ...

  10. 优先队列(priority_queue)的cmp,POJ(2051)

    sort()函数的cmp为函数,priority_queue的cmp为类,具体写法是: struct Node { int i,j; } node[]; struct cmp { bool opera ...