KEIL4工程中添加的C文件,是如何加载的H文件和子C文件的? [问题点数:40分,结帖人eeyyllehs]

Bbs1
本版专家分:85
结帖率 97.67%
Bbs1
本版专家分:85
Bbs2
本版专家分:152
Bbs1
本版专家分:0
Bbs1
本版专家分:0
关于MDK5无法创建core_cm3.o文件的解决办法
关于MDK5无法创建core_cm3.o<em>文件</em>的解决办法 关于MDK5 win10下无法创建core_cm3.o<em>文件</em>的解决办法 身为一个小白,第一次发帖,格式可能不规范,希望大家啊不要介意,在这里我学到了很多,我也真的很希望能帮助到其他遇到同样问题的小伙伴 这是副标题吧,哎呀,好像在用latex写论文一样。。。总之过程是这样 毕业设计要用的stm32,初次接触MDK5,按照正点原子教程一步步来,最后...
工程添加c文件
在Source File<em>文件</em>夹中<em>添加</em>了.c<em>文件</em>,运行出现两个错误提示rn d:\coding\elecdspanaly\Generictest.c(189) : fatal error C1010: unexpected end of file while looking for precompiled header directive rn 与 BSCMAKE: error BK1506 : cannot open file '.\Debug\Generictest.sbr': No such file or directory用以下两个方法尝试都没有解决这个问题rn1 在project-setting-C/C++中更改Category中的Precompiled Headers,选择Not using precompiled Headers 出现两个错误提示rn c:\program files\microsoft visual studio\vc98\mfc\include\afxv_w32.h(14) : fatal error C1189: #error : WINDOWS.H already included. rn MFC apps must not #include rn BSCMAKE: error BK1506 : cannot open file '.\Debug\MainFrm.sbr': No such file or directoryrn2 不选用方法一而是在Generictest.c的头部<em>添加</em>"stdafx.h"rn d:\coding\elecdspanaly\genericconfiguredacquisition.c(6) : fatal error C1853: 'Debug/Test.pch' is not a precompiled header f ile rn created with this compilerrn 以上的调试都是在包含了Generictest.h头<em>文件</em>的情况下进行的,请问问题在哪里.rn
单片机编程 **.c文件与**.h文件
**.c<em>文件</em>与**.h<em>文件</em>的使用方法一直弄不会,c<em>文件</em>中要写一些什么内容 h<em>文件</em>中又要写一些什么内容?<em>如何</em>调用 主函数<em>文件</em>中又可以省略什么内容 一致弄不清
.h文件与C文件的配合
C语言作为一种结构化的程序设计语言,在模块的划分上主要依据功能,C语言模块化程序设计需理解如下概念:     (1) 模块即是一个.c<em>文件</em>和一个.h<em>文件</em>的结合,头<em>文件</em>(.h)中是对于该模块接口的声明;     (2) 某模块提供给其它模块调用的外部函数及数据需在.h中<em>文件</em>中冠以extern关键字声明;     (3) 模块内的函数和全局变量需在.c<em>文件</em>开头冠以static关键
c文件和h文件demo
/***************************************************************************** * demo.h * * Copyright (C) 2017 onejacky * * This program is free software; you can redistribute
c语言中的.c文件和.h文件
大神的详细解读:传送门   记录下一点点自己对两个<em>文件</em>的理解   函数声明可以有多分,但函数定义只能有一份。所以一般不在头<em>文件</em>里面定义函数,因为同一个程序的多个代码<em>文件</em>可能都会包含这个头<em>文件</em>。 但c++中的inline函数是个例外,得定义在头<em>文件</em>中。为了能够扩展inline函数的内容,在每个调用点上,编译器都能取得其定义。这意味我们必须将inline函数的定义放在头<em>文件</em>中。 c++中在...
生成.o文件失败?
我是用的是Eclipse CDT gcc进行编译,但是错误就只有上面这两个图,没有其他任何提示,由于使用到了第三方的库<em>文件</em>zlib,我怀疑自己导入静态链接库到<em>工程</em>的方式不对,但是又不知道是不是这个,
VS 中如何查看编译出来的.o文件
在linux下可以用gcc编译.c<em>文件</em>生成目标代码.o<em>文件</em>,里面形式如下: 00000000 : 0: 55 pushl %ebp 1: 89 e5 movl %esp,%ebp 3:
使用keil4添加文件(STM32F103RB,其实每个型号一样的)
学过51单片机的学弟学妹们 老师上课教<em>如何</em>建<em>工程</em>的时候一般就一个mian.c<em>文件</em>(放置所有程序的) 就算学到后面也就是教你们<em>如何</em>更加有效的写程序 比如把程序分成几个.c<em>文件</em>啥的 在STM32F103RB里面,启动<em>文件</em>,内核<em>文件</em>,库<em>文件</em>,用户<em>文件</em>都是要自己<em>添加</em>的 我们手上一般老师会给一些资料,里面就有这些<em>文件</em> 我们为了自己建<em>工程</em><em>添加</em><em>文件</em>方便,就要自己建一个<em>文件</em>,把他们整理一下 一般可能
Keil4软件如何建立一个的有效工程
第一步:建立<em>工程</em> 1.打开<em>keil4</em>软件,找到project,下拉菜单有一项New uVision Project…点击这个选项,会出现一个项目路径。 2.自定义项目名称和保存位置。 3.选择需要烧代码的单片机芯片的生产公司以及相应的芯片型号。 4.选择OK以后,会出现一个提示:是否<em>添加</em>8051启动<em>文件</em>?此处建议选择否。 第二步:<em>添加</em>.C<em>文件</em>/.asm<em>文件</em> 5.我们可以直接add进去已有的<em>文件</em>...
如何一起编译.h文件和.c文件
我做一个file.h<em>文件</em>和file.c<em>文件</em>,如下:rnfile.hrn/*开始*/rn#include rn#include rnrnfunction1();rnfuncton2();rn...rn/*结束*/rnrnfile.crn/*开始*/rn#include "file.h"rnrnfunction1()rnrn ...rnrnrnfunction2()rnrn ...rnrnrn<em>如何</em>编译它们,使得可以在其他程序里使用?rn或者推荐以下这方面的资料。
c文件如何调用c++的.h文件
在一个vc的对话框<em>工程</em>中,c<em>文件</em><em>添加</em>#include "PCIImageDlg.h"后,编译后会出现pciimagedlg.h(28) : error C2065: 'IDD_PCIIMAGE_DIALOG' : undeclared identifier的错误,<em>如何</em>解决?rn
h文件和c文件中变量的关系
一般的,在h中定义好变量。在c<em>文件</em>中可以直接引用,不过在c<em>文件</em>的头部中需要include进来。
c,.h和.cpp文件
请问大家:一个项目可以同时用C和C++同时做吗?rn为什么有的项目中同时有.c,.h和.cpp<em>文件</em>?他们的区别是什么?
.h和.c文件区别
很多人不明白头<em>文件</em>和.c<em>文件</em>的区别,这里有好多的论坛爱好者的看法,我整理了一下。
利用STM32的官方库在Keil uVision 4中新建一个工程的详细方法
利用STM32的官方库在Keil uVision 4中新建一个<em>工程</em>的详细方法,讲解非常详细,而且,详细说明了新<em>工程</em>的设置方法,还有截图说明,一看就懂。真正的入门好教程。
鸡仔单片机成长记----------------keil中C文件和H文件
今天来谈一下keil中模块化编程的问题,模块化对于比较大型的程序很有帮助,一般都是C<em>文件</em>和H<em>文件</em>配合来形成模块,下面我就来谈谈二者的关系: 我认为:本质上没有任何区别。 只不过一般:.h<em>文件</em>是头<em>文件</em>,内含函数声明、宏定义、结构体定义等内容,.c<em>文件</em>是程序<em>文件</em>,内含函数实现,变量定义等内容。而且是什么后缀也没有关系,只不过编译器会默认对某些后缀的<em>文件</em>采取某些动作。你可以强制编译器把任何后缀的<em>文件</em>都
keil MDK中main.c下面的.h文件是怎样生成的
求大神呀STM32
在keil中添加c文件时的一些常见错误
近期在做项目时,计划<em>添加</em>一个测距模块,因此要新建一个c<em>文件</em>封装一些函数,方便调用,在实际操作时遇到了以下两个问题 1.编译时报错:error:no such file or dictionary 原因一般是没有正确<em>添加</em>头<em>文件</em>,如图,首先在某个<em>文件</em>夹下<em>添加</em>头<em>文件</em>,一般要保证头<em>文件</em>的命名和c<em>文件</em>保持一致  然后打开keil,在左上角的工具栏(和编译,下载等在同一行),找到像魔术棒一样的o...
Keil添加文件的方法
文字配图详细介绍<em>如何</em>在勊了keil中铁建头<em>文件</em>
.h和.c文件
我把函数声明放在.h<em>文件</em>里,把函数的定义放在.c<em>文件</em>里rn在main函数的<em>文件</em>用#include "hansu.h"把函数声明的那个<em>文件</em>包括进去,但是报错rn说实在话,我对.h和.c<em>文件</em>一窍不通
PictureEx的.h和.c文件
MFC中<em>添加</em>gif动图,#include "PictureEx.h",CPictureEx gifImage;
Keil和SystemWorkbench工程添加文件和头文件(.c和.h)的方法
今日参加一个培训,提取的一个SDK代码默认存在好几个目录,需要<em>添加</em>到STM32CubeMX导出的Keil<em>工程</em>里面。好久没用Keil了,发现都忘了怎么<em>添加</em>了<em>文件</em>夹了。 在此把Keil和SystemWorkbench项目<em>添加</em>源<em>文件</em>和头<em>文件</em>的方法做个记录: 1. Keil项目<em>添加</em>源<em>文件</em>和头<em>文件</em> 1.1 右键点击项目名称,弹出菜单中选择Add Group...,我们把所有需要<em>添加</em>的源<em>文件</em>都放在这个Grou...
.h 文件和 .c 文件有什么区别吗
我想include自己建的外部<em>文件</em>,rn但不知道怎么样的保存为.h,rn怎么样的保存为.c ,rnrn到目前为止,好像无所谓,都可以呀
c文件、h文件、定义、声明(详解)
最近在重新学习编程,拿一个“扫雷”的游戏练练手,碰到问题 问题 为什么要分.h<em>文件</em>、.c<em>文件</em>? 变量声明、定义,函数声明、定义,到底做了什么事?起到什么作用? key words 编程是人对机器的使用、命令,编译器是翻译官 编程中使用的变量名、函数名,对于编译器都是陌生的符号 声明告诉编译器这些符号的含义 声明在回答who的问题,定义回答how的问题 “定义”兼具“声明”的...
Keil中添加自己的头文件
 方法一 在keil的开发环境下<em>添加</em>:                   请注意上面的系统生成的头<em>文件</em>目录是:,即.\dd\jj\pp\kk,其中.\是相对于项目<em>文件</em>.uvproj 而言的,其中 .\ 表示项目<em>文件</em>所在的当前目录, 项目<em>文件</em>的绝对路径是:E:\MY_Documents\keil\C5
keil4编程软件如何打开C语言生成的DLL文件
大家好,我这里没法用<em>keil4</em>编程软件打开C语言生成的DLL<em>文件</em>,请求帮助!!
keil加载自己编写的驱动程序的.h头文件
  要<em>添加</em>flash.c和flash.h到<em>工程</em>中。 加了之后有了.c。   对应头<em>文件</em>中放入宏定义和函数声明,对应.c<em>文件</em>中放入函数主体。然后↓ 选择编译就能看到flash.c下的头<em>文件</em>了。   成功!...
keil4中头文件路径设置
<em>keil4</em>中头<em>文件</em>路径设置 被头<em>文件</em>的路径设置困扰了很长时间,现在终于知道了! 在<em>keil4</em>中头<em>文件</em>路径设置的方法: 假设这里有若干个<em>文件</em>,分别是: main.c  dong.c peng.h 其中,main.c和dong.c都依赖与peng.h。他们的内容分别如下: main.c: 绝对路径是:E:\MY_Documents\keil\C51\include\ff\dd
keil4中头文件路径设置的方法汇总
被头<em>文件</em>的路径设置困扰了很长时间,现在终于知道了! 在<em>keil4</em>中头<em>文件</em>路径设置的方法: 假设这里有若干个<em>文件</em>,分别是: main.c dong.c peng.h 其中,main.c和dong.c都依赖与peng.h。他们的内容分别如下: main.c: 绝对路径是:E:\MY_Documents\keil\C51\include\ff\dd\uu
关于C文件和H文件的一个问题
最近初学单片机,在学习别人仿真的时候,看到一个delayC<em>文件</em>和一个delayh<em>文件</em> 具体如:rnDelay h<em>文件</em>:rn#ifndef _DELAY_H_rn#define _DELAY_H_rnrn#include"main.h"rnrnvoid delay_us(uchar n);rnvoid delay_ms(uint n);rnrn#endifrnrnDelay c<em>文件</em>:rn#include"main.h"rnrnvoid delay_us(uchar n)rnrn while(n--)rn rn _nop_();rn rnrnrnvoid delay_ms(uint n)rnrn uchar i;rn while(n--)rn rn for(i=0;i<100;i++);rn rnrnrnrnrnrn请问这两个<em>文件</em>的关系,谢谢!!!
C API-加载文件
<em>文件</em><em>加载</em> c<em>加载</em>lua<em>文件</em>需要用到两个函数宏 luaL_loadfile(lua_State* L, const char* filename) //<em>加载</em><em>文件</em> lua_pcall(lua_State *L, int nargs, int nresults, int errfunc) //执行<em>文件</em> 代码示例: load_test.lua width=200 height=300 ...
BMP转.c/.h文件
我用VB做一个BMP<em>文件</em>转lcd显示使用的.c/.h<em>文件</em>. 要将各像素的数据用16进制转出来. 现在发现转出来的数据与网上的标准工具转出来的数据不一样. 哪里有这种实例参考?
【Ubuntu】关于.c .h 文件
.h<em>文件</em>作为接口存在的。所谓接口就是指类型定义、变量声明、函数声明等等,基本上不会在.h里面放置函数实现。 .c里面才真正实现函数。 比方说,我写一个work的实现: //work.h #ifndef work_h #define work_h //你也可以在这里声明变量,或者定义类型、结构体 void work();//注意这只是一个函数声明 #endif //work.c //work函数的
C语言.h文件作用
想知道.h<em>文件</em>怎么应用,有什么好处和优势,书写的格式,希望好心人帮帮我,请举例说明下,谢谢大家了
keil中怎么添加自己的头文件,加入工程,保存路径。#include还用吗
keil中怎么<em>添加</em>自己的头<em>文件</em>,例如:<em>添加</em>#include&amp;lt;led.h&amp;gt;,要把它写在哪里,保存在哪里,才能编译后,显示 #include&amp;lt;reg51.h&amp;gt;#include&amp;lt;led.h&amp;gt;我这样写了,没反应。是不是要新建<em>文件</em>led.h,再保存在那个<em>文件</em>里面才可以。... #include&amp;lt;reg51.h&amp;gt; #include&amp;lt;led.h&amp;gt; 我...
KEIL中左侧project 的文件编译后没有显示.h文件
1. 退出软件,重新打开试试 2. 如果还没有,查看是否点了show
往keil的工程里面添加文件
虽然一开始就接触建<em>工程</em>,但是由于有模板,所以直接跳过,但是学会建模板还是很重要的。因为你拿到人家的一个<em>工程</em>,很可能有一些<em>文件</em>没有<em>加载</em>进去,编译就会出错,像学长用的比较高端的IAR,而我用的是keil,这时候从他那里考过来的程序直接打开时编译不了的,因为好多<em>文件</em>没有<em>加载</em>。 往<em>工程</em>里面加<em>文件</em>夹和<em>文件</em>还是很简单的,基本就下面几个图 记得选择Al
keil c文件中加入汇编方法
1.汇编语句写法2.设置嵌套了汇编的C<em>文件</em>属性勾选这两项为黑色4.汇编常包含的库<em>文件</em>。自己看着选 存储模式是small模式<em>添加</em>这个<em>文件</em>、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、C51下加入汇编代码使用如下标志符:#pragma asm;汇编语句#pragma end
单使用GCC编译Keil下工程C文件
不得不说Keil貌似是国内用户使用最多的IDE了,其被ARM收购之后,ARM嵌入了ARMCC等编译器推出了Keil MDK开发环境更是受到了广大ARM开发<em>工程</em>师的欢迎,庞大的用户群(很多是从当年的51等8位机直接转过来的)、简洁的管理窗口和友好的UI界面等优势都让其风靡一时,而且毕竟现在成了ARM的“亲儿子”了,其对ARM内核的产品支持还是灰常不错的。     而GCC更是大名鼎鼎,这个至今
C和H文件的不同作用!!
H<em>文件</em>和C<em>文件</em>怎么用呢?一般来说,H<em>文件</em>中是declare(声明),C<em>文件</em>中是define(定义)。因为C<em>文件</em>要编译成库<em>文件</em>(Windows下是.obj/.lib,UNIX下是.o/.a),如果别人要使用你的函数,那么就要引用你的H<em>文件</em>,所以,H<em>文件</em>中一般是变量、宏定义、枚举、结构和函数接口的声明,就像一个接口说明<em>文件</em>一样。而C<em>文件</em>则是实现细节。 rnH<em>文件</em>和C<em>文件</em>最大的用处就是声明和实现分开。这个特性应该是公认的了,但我仍然看到有些人喜欢把函数写在H<em>文件</em>中,这种习惯很不好。(如果是C++话,对于其模板函数,在VC中只有把实现和声明都写在一个<em>文件</em>中,因为VC不支持export关键字)。而且,如果在H<em>文件</em>中写上函数的实现,你还得在makefile中把头<em>文件</em>的依赖关系也加上去,这个就会让你的makefile很不规范。 rn最后,有一个最需要注意的地方就是:带初始化的全局变量不要放在H<em>文件</em>中! rn例如有一个处理错误信息的结构: rn  char* errmsg[] = rn    /* 0 */    "No error",         rn    /* 1 */    "Open file error",     rn    /* 2 */    "Failed in sending/receiving a message",  rn    /* 3 */    "Bad arguments",  rn    /* 4 */    "Memeroy is not enough", rn    /* 5 */    "Service is down; try later", rn    /* 6 */    "Unknow information", rn    /* 7 */    "A socket operation has failed", rn    /* 8 */    "Permission denied", rn    /* 9 */    "Bad configuration file format",  rn    /* 10 */   "Communication time out", rn    ...... rn    ...... rn  ; rn   rn请不要把这个东西放在头<em>文件</em>中,因为如果你的这个头<em>文件</em>被5个函数库(.lib或是.a)所用到,于是他就被链接在这5个.lib或.a中,而如果你的一个程序用到了这5个函数库中的函数,并且这些函数都用到了这个出错信息数组。那么这份信息将有5个副本存在于你的执行<em>文件</em>中。如果你的这个errmsg很大的话,而且你用到的函数库更多的话,你的执行<em>文件</em>也会变得很大。 rn正确的写法应该把它写到C<em>文件</em>中,然后在各个需要用到errmsg的C<em>文件</em>头上加上 extern char* errmsg[]; 的外部声明,让编译器在链接时才去管他,这样一来,就只会有一个errmsg存在于执行<em>文件</em>中,而且,这样做很利于封装。 rn我曾遇到过的最疯狂的事,就是在我的目标<em>文件</em>中,这个errmsg一共有112个副本,执行<em>文件</em>有8M左右。当我把errmsg放到C<em>文件</em>中,并为一千多个C<em>文件</em>加上了extern的声明后,所有的函数库<em>文件</em>尺寸都下降了20%左右,而我的执行<em>文件</em>只有5M了。一下子少了3M啊。rn 这段内容我没有理解到,上面的兄弟兄弟想要转达一个什么意思?请教了!这段内容也是直接转载别人的东西!
DSP .c 和.h文件架构
test.c<em>文件</em>构架 1、包含本<em>文件</em>对应头<em>文件</em>test.h 2、定义仅供本<em>文件</em>内部使用全局变量:用static修饰 3、定义可供外部<em>文件</em>使用的全局变量 4、引用外部<em>文件</em>定义的全局变量的申明:加extern 5、为本<em>文件</em>内定义的函数分配存储空间 test.h<em>文件</em>架构 1、条件编译,以防头<em>文件</em>被重复包含 #ifndef _TEST_H_  #define _TEST_H_
如何添加.h和.cpp文件
我在project中<em>添加</em>了一个os.h和一个os.cpp<em>文件</em>,编译时出现如下错误:rn--------------------Configuration: RegClear - Win32 Debug--------------------rnCompiling...rnos.cpprnd:\regclear\os.cpp(2) : fatal error C1010: unexpected end of file while looking for precompiled header directivernError executing cl.exe.rnCreating browse info file...rnBSCMAKE: error BK1506 : cannot open file '.\Debug\os.sbr': No such file or directoryrnError executing bscmake.exe.rnrnRegClear.exe - 2 error(s), 0 warning(s)rnrnrn<em>如何</em>解决?rn非常感谢!!!
c++工程如何加入c文件
...is not a precompiled header file created with this compilerrnrn我在一个mfc的<em>工程</em>里想加入一些别人写好的c<em>文件</em>,可编译时会出现上面描述的错误
关于C语言中.h和.c文件
原文地址:https://blog.csdn.net/helloworlddm/article/details/76785397 本文为转载,如有侵权,请联系删除。 理论上来说C<em>文件</em>与h<em>文件</em>里的内容,只要是C语言所支持的,无论写什么都可以的,比如你在h<em>文件</em>中写函数体,只要在任何一个C<em>文件</em>包含此.h<em>文件</em>就可以将 这个函数编译成目标<em>文件</em>的一部分(编译是以C<em>文件</em>为单位的,如果不在任何C<em>文件</em>中包含此.h文...
KEIL工程子目录添加文件路径问题
预想中是一个.C<em>文件</em>对应一个.H<em>文件</em>,但是现实情况是这样的,对应全乱了,而有的不知道在哪儿了,这是什么情况,求大神解释
KEIL5 头文件路径设置摸索和总结
KEIL5 头<em>文件</em>路径设置摸索和总结 1.常识 1.1绝对路径和相对路径的认知: 绝对路径:是从盘符开始的路径,形如 C:\windows\system32\cmd.exe 相对路径:是从当前路径开始的路径,假如当前路径为C:\windows 要描述上述路径,只需输入 system32\cmd.exe 实际上,严格的相对路径写法应为 .\system32\cmd.exe 其中,.表示当前路径。 ...
Keil5 包含不进去头文件
建立了如下<em>工程</em>,选择的芯片是stm32f103c6, 也已经把头<em>文件</em><em>添加</em>到<em>工程</em>里面了,但是包含不到main函数里面去,跪求大神解答~~~~~~
Keil4如何组织arm-mdk头文件、库文件
一、集成开发环境很多不透明,和ZF一样。今天想向板子写点东西,就去看arm-mdk使用,发现ppt里面说的和Keil4有很大出入,于是自己分析Keil4<em>如何</em>组织的。 二、由c程序到bin<em>文件</em>,必定经过编译、汇编、链接,<em>keil4</em>只是开发环境(类似于make管理器),真正调用的肯定还是arm自己的编译器、汇编器、连接器。       1. 于是打开Keil4<em>工程</em>,点开Option>LD_LIBR
Keil 下生成LIB库文件以及如何使用LIB库文件
Keil 下生成LIB库<em>文件</em>以及<em>如何</em>使用LIB库<em>文件</em>
C语言的*.c和*.h文件的区别??
敝人是个初学者,不知道.c和.h的有啥联系和区别,望达人指教????
c语言中.C文件与.h文件的关系
关于.H和.C的文章rnrnIn general, header files contain declarations and definitions pertaining to functions defined elsewhere. In general, for any external function you call, there will be a header file which contains the prototype declaration for the function, along with any other definitions of constants or structures which you need to use when calling that function. rnrnHeader files let you keep shared declarations and definitions in a single central place, when those declarations and definitions must be kept consistent between separately-compiled source files. rnrnNote that a header file does not actually contain the definitions of any external functions. After using #include to reference the header file describing some external library function(s), in many cases you will also have to explicitly request that a copy of that external library be read by the linker during the last stage of the compilation process so that the function definitions themselves can be read out of the library and copied into your program's executable. rn简单的说其实要理解C<em>文件</em>与头<em>文件</em>(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程:rnrn1.预处理阶段rn2.词法与语法分析阶段rn3.编译阶段,首先编译成纯汇编语句,再将之汇编成跟CPU相关的二进制码,生成各个目标<em>文件</em> (.obj<em>文件</em>)rn4.连接阶段,将各个目标<em>文件</em>中的各段代码进行绝对地址定位,生成跟特定平台相关的可执行<em>文件</em>,当然,最后还可以用objcopy生成纯二进制码,也就是去掉了<em>文件</em>格式信息。(生成.exe<em>文件</em>)rn编译器在编译时是以C<em>文件</em>为单位进行的,也就是说如果你的项目中一个C<em>文件</em>都没有,那么你的项目将无法编译,连接器是以目标<em>文件</em>为单位,它将一个或多个目标<em>文件</em>进行函数与变量的重定位,生成最终的可执行<em>文件</em>,在PC上的程序开发,一般都有一个main函数,这是各个编译器的约定,当然,你如果自己写连接器脚本的话,可以不用main函数作为程序入口!!!!rn (main .c<em>文件</em> 目标<em>文件</em> 可执行<em>文件</em> )rn有了这些基础知识,再言归正传,为了生成一个最终的可执行<em>文件</em>,就需要一些目标<em>文件</em>,也就是需要C<em>文件</em>,而这些C<em>文件</em>中又需要一个main函数作为可执行程序的入口,那么我们就从一个C<em>文件</em>入手,假定这个C<em>文件</em>内容如下:rn#include rn#include "mytest.h"rnint main(int argc,char **argv)rnrn test = 25;rn printf("test.................%d\n",test);rnrn头<em>文件</em>内容如下:rnint test;rnrn现在以这个例子来讲解编译器的工作:rn1.预处理阶段:编译器以C<em>文件</em>作为一个单元,首先读这个C<em>文件</em>,发现第一句与第二句是包含一个头<em>文件</em>,就会在所有搜索路径中寻找这两个<em>文件</em>,找到之后,就会将相应头<em>文件</em>中再去处理宏,变量,函数声明,嵌套的头<em>文件</em>包含等,检测依赖关系,进行宏替换,看是否有重复定义与声明的情况发生,最后将那些<em>文件</em>中所有的东东全部扫描进这个当前的C<em>文件</em>中,形成一个中间“C<em>文件</em>”rnrn2.编译阶段,在上一步中相当于将那个头<em>文件</em>中的test变量扫描进了一个中间C<em>文件</em>,那么test变量就变成了这个<em>文件</em>中的一个全局变量,此时就将所有这个中间C<em>文件</em>的所有变量,函数分配空间,将各个函数编译成二进制码,按照特定目标<em>文件</em>格式生成目标<em>文件</em>,在这种格式的目标<em>文件</em>中进行各个全局变量,函数的符号描述,将这些二进制码按照一定的标准组织成一个目标<em>文件</em>rnrn3.连接阶段,将上一步成生的各个目标<em>文件</em>,根据一些参数,连接生成最终的可执行<em>文件</em>,主要的工作就是重定位各个目标<em>文件</em>的函数,变量等,相当于将个目标<em>文件</em>中的二进制码按一定的规范合到一个<em>文件</em>中再回到C<em>文件</em>与头<em>文件</em>各写什么内容的话题上:理论上来说C<em>文件</em>与头<em>文件</em>里的内容,只要是C语言所支持的,无论写什么都可以的,比如你在头<em>文件</em>中写函数体,只要在任何一个C<em>文件</em>包含此头<em>文件</em>就可以将这个函数编译成目标<em>文件</em>的一部分(编译是以C<em>文件</em>为单位的,如果不在任何C<em>文件</em>中包含此头<em>文件</em>的话,这段代码就形同虚设),你可以在C<em>文件</em>中进行函数声明,变量声明,结构体声明,这也不成问题!!!那为何一定要分成头<em>文件</em>与C<em>文件</em>呢?又为何一般都在头件中进行函数,变量声明,宏声明,结构体声明呢?而在C<em>文件</em>中去进行变量定义,函数实现呢??原因如下:rnrn rn 1.如果在头<em>文件</em>中实现一个函数体,那么如果在多个C<em>文件</em>中引用它,而且又同时编译多个C<em>文件</em>,将其生成的目标<em>文件</em>连接成一个可执行<em>文件</em>,在每个引用此头<em>文件</em>的C<em>文件</em>所生成的目标<em>文件</em>中,都有一份这个函数的代码,如果这段函数又没有定义成局部函数,那么在连接时,就会发现多个相同的函数,就会报错rnrn 2.如果在头<em>文件</em>中定义全局变量,并且将此全局变量赋初值,那么在多个引用此头<em>文件</em>的C<em>文件</em>中同样存在相同变量名的拷贝,关键是此变量被赋了初值,所以编译器就会将此变量放入DATA段,最终在连接阶段,会在DATA段中存在多个相同的变量,它无法将这些变量统一成一个变量,也就是仅为此变量分配一个空间,而不是多份空间,假定这个变量在头<em>文件</em>没有赋初值,编译器就会将之放入BSS段,连接器会对BSS段的多个同名变量仅分配一个存储空间rnrn 3.如果在C<em>文件</em>中声明宏,结构体,函数等,那么我要在另一个C<em>文件</em>中引用相应的宏,结构体,就必须再做一次重复的工作,如果我改了一个C<em>文件</em>中的一个声明,那么又忘了改其它C<em>文件</em>中的声明,这不就出了大问题了,程序的逻辑就变成了你不可想象的了,如果把这些公共的东东放在一个头<em>文件</em>中,想用它的C<em>文件</em>就只需要引用一个就OK了!!!这样岂不方便,要改某个声明的时候,只需要动一下头<em>文件</em>就行了rnrn 4.在头<em>文件</em>中声明结构体,函数等,当你需要将你的代码封装成一个库,让别人来用你的代码,你又不想公布源码,那么人家<em>如何</em>利用你的库呢?也就是<em>如何</em>利用你的库中的各个函数呢??一种方法是公布源码,别人想怎么用就怎么用,另一种是提供头<em>文件</em>,别人从头<em>文件</em>中看你的函数原型,这样人家才知道<em>如何</em>调用你写的函数,就如同你调用printf函数一样,里面的参数是怎样的??你是怎么知道的??还不是看人家的头<em>文件</em>中的相关声明啊!!!当然这些东东都成了C标准,就算不看人家的头<em>文件</em>,你一样可以知道怎么使用
C语言中.c文件与.h文件 的使用
C语言中.c<em>文件</em>与.h<em>文件</em> 的使用 我们都知道一个C程序的入口是main()函数,当我们遇到一个比较大的程序,需要被每个功能模块区分开始,就需要使用不同的.c和.h<em>文件</em>。这样方便自己管理和使用c程序,.h是头<em>文件</em>,一般存放函数的声明、数组、和定义的变量,.c是源<em>文件</em>,是实现函数程序的功能。 <em>如何</em>使用.c和.h呢,首先需要建立一个xx.h<em>文件</em>,这里面是函数的声明和一些变量的定义,其次建立一个同名的x...
如何把.c和.h文件连起来编译.
例如编译一个<em>文件</em>可用:rngcc -o logfile.o -c logfile.crnrn但用上面的方法老是检查不到.h<em>文件</em>的宏修改和宏条件,所以想把它改成rnrngcc -o logfile.o -c logfile.c logfile.hrnrn但是发现这样不行,大家有什么办法让他们两编译在一起吗?
C语言中的.h文件如何看待?
最近重新学习了一下C语言,并编写程序,有个小插曲,就是和同事讨论了一下关于C语言中.h<em>文件</em>的好处。rn我们得到了一些答案,但也被否定了,如:rn1、可读性rn2、代码量rn3、保密程度rn4、程序维护量rnrn但是总觉得这些不对,按照我们的意思。对于.h<em>文件</em>的重要性还是不太了解,比如说,如果一个C语言当中不用.h可不可以。答案是可以的,我们可以用.c来代替。可是那.h<em>文件</em>还有存在的意思吗?rnrn对于这个问题可能想的有点偏激,希望高手来解答一下!
keil中C编写的问题,求帮助,程序不难
AD+串口程序 #i nclude __CONFIG(0x1832); union adres {int y1; unsigned char adre; }adresult; int A
keil 中如何调用其他文件的函数
今天有点小郁闷,搞了好久也没有真正搞通i2c的含义,但是也还是学到了很多东西的哦,在keil中肯定会包含有很多<em>文件</em>的哦,那怎么样在一个C<em>文件</em>中调用另一个的函数呢?呵呵!        建立一个和这个C<em>文件</em>同名的H<em>文件</em>,把这个C<em>文件</em>中的函数都包含到这个H<em>文件</em>中就ok! 例如:有这样一个serial.C<em>文件</em>: /******************************************
eclipse配置生成.h和.so文件过程
1、创建android<em>工程</em>         在这里我选择的是android API 5.0                    选好后一直接Next直到android<em>工程</em>创建好。 2.右键<em>工程</em> ----new -----Folder(创建JNI<em>文件</em>夹)            因为手动创建的jni<em>文件</em>夹下面没有任何东西。这时候我们需要手动创建 Android.mk<em>文件</em>。
如何将自己的.h文件和.cpp文件加入MFC基于对话框的工程
我写了一个***.h<em>文件</em>,在<em>文件</em>里定义了一些类,然后在***.cpp<em>文件</em>里对有些类的成员函数定义(加了#include“***.h”) 但是当我把这两个<em>文件</em>加入我的MFC<em>工程</em>中时,会编译出错 Good
C语言的.h文件如何转换成XML文件.
请大家给我一个思路.rnrn我自己琢磨琢磨..rnrn谢谢
WDF的工程如何包含已有的.c/.h文件
WDF的<em>工程</em><em>如何</em>包含已有的.c/.h<em>文件</em>?rnrn我有几个例子,书上的,例子的目录里面只有.c/.h和其他一些.rc/.inc等附属<em>文件</em>,但不是用WDF<em>工程</em>创建的,因此无法用VC2008的IDE编译。我自己建了一个VC2008的Driver<em>工程</em>,把那些.c/.h<em>文件</em>都拷贝到目录中,并且都加入到<em>工程</em>中了。并且照下面的样子改动了 sources <em>文件</em>:rnrnTARGETNAME=PCISamplernTARGETPATH=objrnTARGETTYPE=DRIVERrnrn# Use additional include filernNTTARGETFILES=makefile.incrnrn# Create browse inforn#BROWSER_INFO=1rn#BROWSERFILE=rnrn# Additional defines for the C/C++ preprocessorrn C_DEFINES=$(C_DEFINES)rnrnINCLUDES=$(INCLUDES);..\..\inc rnrnSOURCES=driver.c \rn device.c \rn queue.c \rn drvversion.rcrn rn结果编译的时候总是报错:找不到wdf.h,但是我在#include 上,右键,是可以打开wdf.h的,究竟是什么问题?rnrn我应该<em>如何</em>创建一个<em>工程</em>,去容纳这种以前的程序,which不是用VC2008的Driver<em>工程</em>的方式创建的?rn
在vs2003中新建win32工程如何才能添加c文件
vs2003中只有c++亚..
关于C语言程序中.h文件的总结
C语言头<em>文件</em>使用总结
2008中如何添加.h和.cpp 文件
刚开始使用2008很不习惯,和原来使用的vc6.0有很大的差别,问一下,我原先写好的一个类,<em>如何</em><em>添加</em>到<em>工程</em>中。rnVC6.0只要<em>添加</em><em>文件</em>就可以,2008我一直没找到!rnrn大神们现身吧
是一个c的文件
这是一个新手的c初始,大家尅看看有什么问题。鼓励为主,c还是很有趣的
linux c下的c文件 h文件 o文件 so文件 a文件 可执行文件 gcc使用
linux下c语言<em>工程</em>: c<em>文件</em>:主要每个模块的原代码都在c<em>文件</em>中。 h<em>文件</em>:每个c<em>文件</em>都跟着一个h<em>文件</em>,h<em>文件</em>的作用是放着c<em>文件</em>中函数的声明,结构体的定义,宏的定义等。 o<em>文件</em>:目标<em>文件</em>。每个<em>文件</em>经过编译都会形成一个目标<em>文件</em>(二进制<em>文件</em>),多个目标<em>文件</em>链接后才能形成可执行<em>文件</em>。 o<em>文件</em><em>如何</em>形成: gcc -c a.c 可执行<em>文件</em>: 不论是c<em>文件</em>还是o<em>文件</em>,都是无法执行的,最终还要生成
C 关于文件加载问题
我写了个程序这是其中的一段rn[code=C/C++][/code]rntypedef structrnrn char name[30];rn char units[30];rn char tele[20];rnADDRESS;rnint load(ADDRESS r[]);rnint load(ADDRESS r[])//后来我多加了一个行参(ADDRESS r[],int n)n是我前面要求输入的纪录函数返回的直,这样就通过编译还可以运行,但是我<em>加载</em>也出现了<em>加载</em>成功,但是我查却没有<em>加载</em>进来没有纪录rnrn int n;rn FILE *fp;rn if((fp=fopen("RECORD.txt","rb"))==NULL)rn rn cout<<
C中如何判断一个文件是链接文件
C中<em>如何</em>判断一个<em>文件</em>是链接<em>文件</em>?rn谢谢:rnrn使用S_ISLNK是否可以?
如何添加文件夹到工程
最近在学习openssl,遇到点小麻烦rn比如程序:rn#include rnvoid main()rnrn .................rnrn但<em>如何</em><em>添加</em><em>文件</em>夹openssl到<em>工程</em>呢,而且rsa.h中也用到这个<em>文件</em>夹中的很多头<em>文件</em>。以前都是直接<em>添加</em>头<em>文件</em>的,是不是可以直接<em>添加</em><em>文件</em>夹rn
C文件文件的操作
C<em>文件</em> <em>文件</em>:存储在外部介质上数据的集合。 在程序设计中,<em>文件</em>主要分为程序<em>文件</em>与数据<em>文件</em>。 程序<em>文件</em>:源程序<em>文件</em>(后缀为.c)、目标<em>文件</em>(后缀为.obj)、可执行<em>文件</em>(后缀为.exe)(此<em>文件</em>内容为程序代码); 数据<em>文件</em>:程序运行中输出到磁盘(或其他外部设备)的数据、在程序运行过程中供读入的数据(此<em>文件</em>内容为供程序运行时读写的数据)。 <em>文件</em>标识分为三部分:<em>文件</em>路径、<em>文件</em>名主干、文...
请教::在VC中调用C语言的.c和.h文件的具体实现
参见贴:rnhttp://community.csdn.net/Expert/topic/2808/2808847.xml?temp=.0476343rnhttp://community.csdn.net/Expert/topic/3333/3333744.xml?temp=.7541162rnrnrntest.h:rnvoid sleep(int time);rnrntest.c:rnvoid sleep(int time)rnrn Sleep(time);rnrnrn新建一个对话框<em>工程</em>,在对话框类#include "test.h"rn然后在对话框中新建一个button,button点击函数调用void sleep(int time)rn结果显示不能调用,要怎样才能调用到test.c中的sleep函数,多谢了rn不能封装成dll,也不能把test.h和tet.c写成一个类,要直接只用这2个<em>文件</em>,尽量rn做少的改动.rn
如何在VC工程加载C 文件
<em>如何</em>将C<em>文件</em>中的头<em>文件</em>放到External dependecies目录下rn直接在<em>工程</em>中加.C的<em>文件</em>以及.h的<em>文件</em>。rn并且将头<em>文件</em>前加入以下语句:rn#ifndef _***_H_rn#define _***_H_rnrn#ifdef __cplusplusrnextern "C" rn#endifrn编绎出现如下的错误。rnfatal error C1010: unexpected end of file while looking for precompiled header directivernError executing cl.exe.
VC工程如何添加文件夹中的源文件(.h和.c)
本人目前已经转入到Linux嵌入式编程,但是一直使用VC2005是用来编辑并查看源码,rnrnVC2005中不知道可不可以像SourceInsight那样<em>添加</em><em>文件</em>夹做为源码路径,并且可以递归其中所有目录,直到找到所有中源码rn<em>文件</em>为止。 rnrn现在一直是手动去<em>添加</em>的,可是当<em>文件</em>夹中包含的目录及深度很深时,手动<em>添加</em>非常耗时。rn
mfc工程如何使用c语言的文件
用.net 2005做的基于对话框的mfc程序,现在想在里面使用以前用c语言编写的<em>文件</em>rnaaa.h和aaa.c.我把这两个<em>文件</em>包含到<em>工程</em>后,报错rnfatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h"' to your source? d:\ceshi\ctest\ctest\aaa.crn<em>如何</em>做才能不报错呢?rn不要包含"stdafx.h",也不能改<em>文件</em>的后缀。
在c中,如何删去文件
不调用system函数,<em>如何</em>删去<em>文件</em>?rn解决者加分!rn例如:copy old.bin to new.bin, then delete old.binrnDelete()rnrn open file "old.bin"rn read content to buffer.rn create the new file "new.bin".rn write the content of buffer to the new file.rn delete the old file. //how to do thisrn
keil4 如何生成bin文件
  最近由于公司的需要,下载程序的时候需要生成bin<em>文件</em>,对于我这个一直用hex<em>文件</em>的还真是出现了点问题,不过通过网上查询资料和自己的研究,最终搞定。下面介绍生成的方法。  1、首先打开<em>keil4</em>的Options for Target ‘Target1’2、按照下图进行配置C:\Keil\ARM\BIN40\fromelf.exe --bin -o ../output/ITEMP.bin ../o...
MFC工程中加入C文件的问题
小弟由于论文算法需要,现要向MFC<em>工程</em>中加入.C<em>文件</em>,该<em>文件</em>包含了一些我所需的函数实现。 rn操作步骤为project->add to project->Files,然后<em>添加</em><em>文件</em>,此后选中<em>文件</em>,按Alt+F7后, rn在C/C++->Category->Precomplied Headers中选择No PCH.此时,在class view中的Globals中已经出现 rn所需函数。如函数名叫aa(),我在我类中用::aa()去调用函数,编译报错 aa is not a member of 'global namespace' rn该<em>如何</em>使用啊。小弟不胜感激。
怎么在单文档工程中调用.c文件
怎么在单文档<em>工程</em>中调用.c<em>文件</em>?
mfc工程中使用c的代码文件
我开发的mfc<em>工程</em>用到别人写的用c写的程序代码。rn
.h文件是怎么匹配.cpp文件的?
把.cpp<em>文件</em>中的函数实现,定义声明在.h<em>文件</em>中rn项目里引用.h就可以使用了,我想问的是.h<em>文件</em><em>如何</em>知道函数是属于哪个.cpp<em>文件</em>?如果有重名的怎么办?还有函数前加extran是什么意思?
动态库工程如何生成.lib文件和.h文件
开发环境是VS2010.具体步骤请明示。
加载另一个.c文件中的函数问题
各位大虾,我有一个问题急着解答,请各位帮忙:rn问题是:我有一个hik.c(是主程序<em>文件</em>),现在要在主程序中调用另一<em>文件</em>file.c(没有main函数,只是一些函数的定义)中的函数,同时还有file.c的头<em>文件</em>(函数声明),我在linux下去编译:rnrngcc -c hik.c 生成hik.orngcc -c file.c 生成file.orngcc -o hik.o file.orn结果提示还是没有要调用函数的定义,请高手指点 在线等待
关于添加文件工程
小弟想改进一个类,又不想把之前的类改了,所以没在原来的<em>文件</em>夹下修改,于是在别的<em>文件</em>夹下建立了一个新<em>工程</em>,然后拷贝了原类,并做了修改,然后在<em>工程</em>下点击了<em>添加</em>新<em>文件</em>到目录,把原类的cpp<em>文件</em>放进去,再做修改,谁知调试之后除了很多问题。我觉得应该是因为他们不在同一个<em>文件</em>夹下出的问题,但是我点击了<em>添加</em>新<em>文件</em>到目录了啊~难道要我手动把<em>文件</em>复制粘贴过去,vc不会处理这样的问题吗?
C之向文件添加内容
[code=C/C++]#includern#includern#includern#includern#define LEN 100rnrn//输出<em>文件</em>内容rnvoid print(fptr)rnrn char c;rn printf("\n数据<em>文件</em>内容如下:\n");rn while((c=fgetc(fptr))!=EOF)rn printf("%c",c);rn printf("\n");rnrnrn//向<em>文件</em><em>添加</em>内容rnvoid *add(fptr)rnrn char keyin[LEN];rn int i;rn while(1)rn rn printf("\n请问是否要继续<em>添加</em>数据(Y/N): ");rn if(toupper(getche())=='Y')rn rn printf("\n请输入要<em>添加</em>的数据:");rn gets(keyin);rn for(i=0;i
如何工程添加文件
我手里有别人编的一个类:1.cpp和1.h,我用Add to project把这两个<em>文件</em>加入到我的<em>工程</em>,其他的什么也不作,编译出错:fatal error C1010: unexpected end of file while looking for precompiled header directive Error executing cl.exe.rn这两个<em>文件</em>本身没有错,也不需要其他的头<em>文件</em>,请问这是怎么会事?rn
如何向现有的mfc工程添加c文件
要把c<em>文件</em><em>添加</em>到mfc<em>工程</em>
工程如何添加obj文件
我在一个.cpp<em>文件</em>中写了几个函数,然后编译成obj<em>文件</em>,再新建一个<em>工程</em>,怎么在这个<em>工程</em>中<em>添加</em>obj<em>文件</em>,rn调用其中的函数啊? 请各位多多指教!
工程如何添加.dll文件
我要<em>添加</em>shinh_vb6.dll怎么<em>添加</em>到<em>工程</em>里面去呢?
工程如何添加lib文件?
直接在Project Manager<em>添加</em>还是import Type Library?rnrnrn后者貌似会报错
eclipse的工程如何添加文件
我新手请教,新建一个空<em>工程</em>,把几个class<em>文件</em>放到目录中,不知道怎么把这些<em>文件</em><em>添加</em>到<em>工程</em>中。rn还有一个问题,程序中用到外部的包(库),而这个库包含了一个目录,怎么设置<em>工程</em>的库路径呀?
C文件如何命名
在 myhead.h中有函数test的函数签名,具体实现在另外一个.c<em>文件</em>中,rn在<em>文件</em>main.c中有main函数,main.c <em>文件</em> include 了 myhead.h,如果要在main.c中使用test函数,那么实现test方法的.c<em>文件</em>应该<em>如何</em>命名呢?rn在编译的时候应该怎么编译呢?rn注明:linux下使用gcc编译。不使用vc或者其他ide环境。
matlab资料\MATLAB6.0教程初级下载
matlab资料\MATLAB6.0教程初级 里面包涵了MATLAB6.0软件的各种基本操作与使用方法以及注意事项,好好学习会对大家有很大的帮助 相关下载链接:[url=//download.csdn.net/download/love0fate/2881472?utm_source=bbsseo]//download.csdn.net/download/love0fate/2881472?utm_source=bbsseo[/url]
CCleaner_3.24.1850下载
CCleaner_3.24.1850 相关下载链接:[url=//download.csdn.net/download/luck200803/4708466?utm_source=bbsseo]//download.csdn.net/download/luck200803/4708466?utm_source=bbsseo[/url]
Windows7下我的电脑右键管理失效解决方案下载
windows7下解决电脑右键管理失效问题 相关下载链接:[url=//download.csdn.net/download/gdz754/4876463?utm_source=bbsseo]//download.csdn.net/download/gdz754/4876463?utm_source=bbsseo[/url]
我们是很有底线的