c语言工程,在.h文件中声明的函数是不是在同名.c文件中定义?

比如在main.c中已经include"output.h",main函数中要用到output.h声明的PrintMessage函数,
那么PrintMessage函数是不是在output.c中定义?

c

3个回答

共3个文件:

一 main.c 代码如下:

#include "stdio.h"
#include "output.h"

int main()
{
    PrintMessage();
    printf("Successed!");
    return 0;
}

二 output.h 代码如下:

 void PrintMessage(void);

三 ouput.c 代码如下:

#include "stdio.h"

void PrintMessage(void)
{
    printf("Test!\n");
}

输出结果如下图:
图片说明

因为没有看到你的代码,不好说问题出在哪。
你可以对照检查下。

output.h文件是 函数声明 文件,output.c文件是 函数定义 文件
需要使用该函数,包含头文件即可。

用心回答每个问题,如果对您有帮助,请采纳答案好吗,谢谢。

头文件的作用仅仅是提供函数接口而已,理论上说既可以在头文件中定义,也可以只声明,实现可以在任何文件包括main.c文件。只要你编译的时候加上这个文件就可以了。
ps:需要了解编译的预编译,预编译时,编译器会把include所包含的头文件,拷贝到你的正式代码之前,这时候,就和我们使用函数在函数定义之前必须先做声明一个道理。

在output.c中定义Print Message函数
在output.h中声明一下这个函数,就可以了

SUR0608
SUR0608 回复zssdhr: 应该是output.c文件中没有写自己的头文件# include "output.h"
大约一个月之前 回复
zssdhr
zssdhr 但是我遇到报错undefined reference to 'PrintMessage'。我在output.h中有加extern
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
两个文件定义了同名的变量,会是同一个变量吗?

http://bbs.csdn.net/topics/370042598 两个文件定义了同名的变量,会是同一个变量吗? [问题点数:20分,结帖人screen12] 收藏 screen12 screen12 等级:结帖率:96.85% 楼主 发表于: 2011-06-30 13:28:24 我在一个工程中建立了两个文件

关于C和C++不同源文件中重名变量的问题

在CSAPP中看到的程序链接规则: 函数名, 有初值的全局变量, 编译器会把它作为"强"符号, 而无初值的全局变量, 编译器会把它作为"弱"符号. 链接的时候, 如果不同文件中出现同名的"强"符号, 链接失败. 如果同名的有一个"强"符号, 多个弱符号, 链接"强"符号, 丢弃"弱"符号. 如果只有多个同名的"弱"符号, 则随机选一个链入可执行文件, 这也是有道理的, 因

C语言头文件函数声明是否加extern

最近看创龙的DSP程序,忽然遇到一个C语言的语法问题,感觉非常纠结,归根结底还是以前C语言学的不扎实,所以才会卡在这种小的语法问题上。我的问题是这样的,在看UART_EDMA例程的时候,main函数调用了UARTStdioInit();函数,UARTStdioInit();在uartStdio.c文件里,然后UARTStdioInit();函数里又调用了UARTConsoleInit();函数,该

多个.c .h文件时出现的重复定义错误问题

c/c++语言中有很多地方要用到extern,但是如果没有真正的了解它的意义,会给编程带来很大的麻烦,为了使大家少走弯路,特祥细的说明一下。       对于比较小的程序,一般只有一个c文件和一个头文件,全局变量我们通常会直接定义在c文件中,在程序之前加int i定义。如果要在头文件中定义有以下两种方法:用extern来声明:extern int i;这一句只是对变量i进行声明,在c文件的程序之

转载 永远不要在.h文件中定义变量!

C语言作为一种结构化的程序设计语言,在模块的划分上主要依据功能,C语言模块化程序设计需理解如下概念:     (1) 模块即是一个.c文件和一个.h文件的结合,头文件(.h)中是对于该模块接口的声明;     (2) 某模块提供给其它模块调用的外部函数及数据需在.h中文件中冠以extern关键字声明;     (3) 模块内的函数和全局变量需在.c文件开头冠以stat

多个".h"文件中声明及定义 全局变量和函数

一、".h"文件必须以如下格式书写 例:文件《CZ_efg_hi.h"》 ------------文件内容----------- #ifndef CZ_Efg_Hi_H #define CZ_Efg_Hi_H ..... 所有文件内容 ..... #endif ---------------------------------  

c语言头文件中函数是否加extern

在.h文件中声明的函数,如果在其对应的.c文件中有定义,那么我们在声明这个函数时,不使用extern修饰符, 如果反之,则必须显示使用extern修饰符.

头文件中写类的实现出现函数重复定义的问题

先来做一个实验,你在一个头文件中定义一个类,然后把内中的一个函数的实现写在这个头文件当中。 //A_test.h #ifndefine _A_TEST_ #define _A_TEST_ class A { void test(); }; void A::test() { } #endif //A_test.cpp #include A_test.h //B_t

【转】结构体定义在头文件.h中和定义在.c中的不同考虑

C语言中对于结构的定义一般放在.h中还是.c中 http://www.oschina.net/question/999013_92593?sort=default&p=1    点击打开链接 ——如果其可见性超出一个.c文件,那么应当放入.h中,如果只是某个.c里需要这么一个结构作为辅助,直接放入这个.c中更好一些。 .h的影响范围更大,如果有修改的话所有依赖的文件都要重新编译,会

全局变量不能定义在“被多个.c文件引用的.h文件”中

转自: https://blog.csdn.net/basstal/article/details/52275191全局变量global定义在头文件中,因为所有定义预设为外部链接,所以在头文件被.c文件包含以后,等于有两个或更多同等定义的global存在于不同的翻译单元,编译器发现不了错误,因为编译器每次是以翻译单元运作的。但是,链接器会在解析交叉引用时报告“符号被多重定义”错误。//Define...

GCC的C语言多文件项目,只包含.h

起初,只是感觉到上一篇那样包含func.c很不干净,感觉不舒服。和弟弟讨论,对gcc也不熟,vc是很容易改的,gcc不灵。 看了这位作者“梦醒”的文章茅塞顿开: http://blog.sina.com.cn/s/blog_7c7b50f10101fbaq.html 非常感谢。 最后那段抄一下: (1) 对应的.c文件中写变量、函数的定义 (2) 对应的.h文件中写变量、函数的声明

C头文件声明和实现分开

类声明放到.h文件 实现放到cpp文件 头文件(.h)主要包含函数的声明、宏定义等 源文件(.cpp)是函数 的实现部分 是主体部分。 在C语言里面,有时候为了方便(方便的同义词是偷懒),函数就直接在头文件里面实现了。那么这样子有什么问题呢? 下面举个例子,这个例子只有3个文件 #ifndef FUN_H #define FUN_H void base(){}; vo

几个.C文件想同时调用定义在.H文件里面的全局变量,防止重定义变量问题。

首先,在.H文件里面加extern关键词声明全局变量, 然后,在.C文件中定义全局变量,变量定义不要放在头文件里。 在C文件里定义,在头文件里extern 例如: module1.h extern int iCounts;//声明变量 module1.c int iCounts;//定义变量 moudule2.c//其他C文件,包含.H文件后(#includ

C语言为什么要区分.h和.c?为何不能在头文件里写定义?

原贴:https://blog.csdn.net/trap94/article/details/50602090我们都知道,在写外部函数的时候,应该在源文件中写具体定义,而在对应的头文件中写申明,最后在执行文件中包含这个头文件就行了。但到底为什么不能在直接在头文件里写定义呢?一句话解释下:因为会产生重复定义的问题!但我们还知道,我们还有#ifndenf这个东西,如果要问起来这东西是干啥用的,估计大...

函数声明放在头文件中,函数的定义放在实现文件中,然后在主函数中调用

1.文件的组织结构如下图: 2.Menu.h内容如下:       #ifndef  MENU_H    #define MENU_H    int add(int a,int b);    int minus(int a, int b);    #endif 3.add.cpp内容如下: #include "Menu.h" int add(int a, int b)

为什么.h文件中不能定义全局变量

原因:      存在多次创建变量.如果头文件中可以定义全局变量,那么每个包含该头文件的文件里都会有该全局变量的定义.因为C语言的include是直接将文件嵌入到include这个地方的.     ​ 解决办法:     ​在头文件使用 extern 来声明该全局变量,然后再任意一个cpp文件中定义该变量.全局变量是存放在静态区的.会被默认初始化为0.

为什么.h文件中只能申明不能定义全局变量

最近使用keil编写下位机单片机程序,打算进行模块化的设计,遇到了在.h文件中定义全局变量报错的问题。原因:    因为C语言的include是直接将文件嵌入到include这个地方的.如果多次包含这个头文件,就存在多次创建变量的问题。解决办法:    在头文件中申明全局变量,在对应的.c文件中定义该全局变量,其他文件访问时候就不会报错了。为此写了一段测试代码://my.h#ifndef __my...

c中头文件在cpp文件中引用和.h文件引用的思考

我们在编写程序中头文件是jianchan

能否在.h文件中定义const常量?

在C中,定义一个const形对象是会分配空间的,并且这个空间具有全局         域,因此如果一个const定义在header中,那么如果这个header被多个c         源文件包含的话,就会产生multiply   defined   symbols的错误。         可以通过增加static的方式将它的连结属性变成局部的就可以了。         在C++中,const默认具

.h与.c的关系和使用方法

.h与.c的关系和使用方法 文章来源 凡是进行单片机c语言编程,都要涉及.h文件和.c文件,特别是整个project比较大,各部分功能比较明确的时候,最好使用自己规划好的头文件和源文件,可以使project变得有条理。 很早就接触自定义头文件,但一直没有真正搞明白.h.c的关系,稀里糊涂的使用。最近接触了arm发现模板工程里面的模块非常有条理,再加上我自己写的51c语言程序有时候出现因头文

c中全局同名变量、函数

同名1.h : #include #include #include extern int globle_int_a; void globle_Func() { printf("同名1 :%d\n", globle_int_a); }; void myfunc(); 同名2.c #include #include #include //#include "同名1.

c语言中头文件的建立与使用-函数、全局变量、全局数组

<br />一些初学C语言的人,不知道头文件(*.h文件)原来还可以自己写的。只知道调用系统库函数时,要使用#i nclude语句将某些头文件包含进去。其实,头文件跟.C文件一样,是可以自己写的。头文件是一种文本文件,使用文本编辑器将代码编写好之后,以扩展名.h保存就行了。头文件中一般放一些重复使用的代码,例如函数声明,变量声明,常数定义,宏的定义等等。当使用#i nclude语句将头文件引用时,相当于将头文件中所有内容,复制到#i nclude处。为了避免因为重复引用而导致的编译错误,头文件常具有<br

【C语言】11-函数的声明和定义

一、函数的声明 1.在C语言中,函数的定义顺序是有讲究的:默认情况下,只有后面定义的函数才可以调用前面定义过的函数 1 int sum(int a, int b) { 2 return a + b; 3 } 4 5 int main() 6 { 7 int c = sum(1, 4); 8 return 0; 9 } 第5行定义的main函数

C/C++ 语言中.h文件和.c文件详细解析 引用 .c和.h文件的区别

预处理是编译器的前驱,作用是把存储在不同文件里的程序模块集成为一个完整的源程序. #include本身只是一个简单的文件包含预处理命令,即为把include的后面文件放到这条命令这里,除此之外,没有其它的用处(至少我也样认为). 我对乾坤一笑兄的观点,十分赞同,基础的东东一定要弄明白. 我下面就乾坤一笑兄的例子做讲,完备他的一些让人迷惑不解的时候~ 例子: //a.h vo

C语言中的.h文件的作用

C语言中的.h文件和我认识由来已久,其使用方法虽不十分复杂,但我却是经过了几个月的“不懂”时期,几年的“一知半解”时期才逐渐认识清楚他的本来面目。揪其原因,我的 驽钝和好学而不求甚解固然是原因之一,但另外还有其他原因。原因一:对于较小的项目,其作用不易被充分开发,换句话说就是即使不知道他的详细使用方法,项 目照样进行,程序在计算机上照样跑。原因二:现在的各种C语言书籍都是只对C语言的语法进行详

C语言的头文件和宏定义详解

之前对C语言的头文件和宏定义抱着一知半解的态度,现理清思路并以文字的形式整理出来,以供不时之需 头文件 头文件,顾名思义就是定义在C语言文件头部的那一坨东西 #include 这就是一个标准输入输出的头文件声明,头文件声明写在定义文件(后缀名.c的文件)的头部,并在定义文件中具体实现 #include #include &amp;quot;mylib.h&amp;quot; 这是两种声明头文件的

变量一般不要定义在.h文件中

文件中的#ifndef  头件的中的#ifndef,这是一个很关键的东西。比如你有两个C文件,这两个C文件都include了同一个头文件。而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突。  还是把头文件的内容都放在#ifndef和#endif中吧。不管你的头文件会不会被多个文件引用,你都要加上这个。一般格式是这样的:  #ifndef   #

static在头文件中定义带来的危害

static的三种使用方式 (1)局部静态变量  (2)外部静态变量/函数  (3)静态数据成员/成员函数  引用static变量要小心! 因为static的局部性,全局静态变量在声明他的文件之外是不可见的。准确地讲从定义之处开始到文件结尾。 1. 如果在头文件中定义static变量,被多个文件引用,编译可以顺利通过!即该头文件被包含了多少次,这些变量就定义了多少次。

C语言中头文件相互包含问题

.h中一般放的是同名.c文件中定义的变量、数组、函数的声明,需要让.c外部使用的声明。   1)h文件作用    1 方便开发:包含一些文件需要的共同的常量,结构,类型定义,函数,变量申明;    2 提供接口:对一个软件包来说可以提供一个给外界的接口(例如: stdio.h)。       2)h文件里应该有什么        常量,结构,类型定义,函数,变量申明。 

关于C/C++头文件重复定义的思考

重复定义是书写程序中经常遇到的问题。下面将分析为什么会出现重复定义的问题,怎么解决重复定义的问题。只需要写代码的一个好的书写习惯。不管项目多么大,重复定义再也不会出现。

C++中类定义可以写在.h文件,但函数定义却不行

前两个转自:http://bbs.csdn.net/topics/390542206?page=1#post-395264705 一、定义和声明 1) 定义就是声明,声明不一定就是定义,声明的意思是已经定义了。    定义是直接说已经定义了,非定义声明,是间接说已经定义了。    声明,不需要明白告诉你,定义成什么样子,你懂得就行。    定义,必须清晰,不能含糊,因为要分配空间。

C语言编码规范--->自己需要注意的项

 头文件: 1. 每一个.c文件应有一个同名.h文件,用于声明需要对外公开的接口。 2. 禁止头文件循环依赖。 3. 头文件应当自包含(任意一个头文件均可独立编译)。 4. 禁止在extern"C"中包含头文件。 5. 禁止在头文件中定义变量,如果头文件被其他文件包含,会引发重复定义。 6. 只能通过包含头文件的方式使用其他.c提供的接口,

c源文件中要包含自己的头文件

引言:             我们经常在c工程中发现,源文件中要包含自己的头文件。一直以来,都不知道为什么这样做。现在,我知道了。 以前的认知:  我认为,.c文件没有必要包含自己的.h文件。.h文件包含.c文件中定义的函数和全局变量的声明,.h文件就是.c文件提供的对外接口文件。既然.h文件就是.c文件提供的对外接口文件,那么.c文件就没必要包含自己的.h文件了(.h文件是对外提供用

C语言如何跨文件调用函数定义中声明的变量

变量的作用域 我们知道,变量根据其作用域有全局变量和局部变量之分。全局变量作用域是整个文件,并且可以使用关键字 extern 达到跨文件调用的目的。但是局部变量值作用于它当前所在的块(即该变量所处最内层中括号之间的区域),当函数执行完并离开当前块后,局部变量及其所处内存空间的值就会销毁。 我有几张阿里云幸运券分享给你,用券购买或者升级阿里云相应产品会有特惠惊喜哦!把想要买的

GCC/LD编译链接潜规则 (第三弹) : 当项目库中包含多个同名的头文件时.

gcc在寻找头文件时, 会按照一定的顺序在很多个目录挨个寻找, 一旦找到一个即停止寻找. 如果项目中存在多个同名的头文件, 则以第一个为准, 后面的直接忽略. 这个特性会导致很多编译不通过的问题! GCC的寻找依赖的头文件顺序为: (这里已a.h为例) 1) 优先在使用了#include ”a.h” 的文件所在的目录寻找a.h 2) 在GCC通过 –I 指定的包含路径中从左到右找.

声明在头文件和实现文件中的区别

调试程序的时候,突然想到这个问题,百度一下发现有不少这方面的问答,粗略总结一下: 属性写在.h文件中和在.m文件中有什么区别? objective-c中有分类和类扩展的概念,而实现文件中的类声明实际上就是类扩展 @interface部分为类扩展(extension)。 其被设计出来就是为了解决两个问题的,其一,定义类私有方法的地方,也就是下面说到的区别一。其

在C语言头文件里“定义”全局变量的方法

有时候我们想在头文件里声明数据

object-c中.m和.h文件及类的定义

转自:http://blog.csdn.net/dizzthxl/article/details/8903296 在Objective-C里面一个类的构成一般由两部分组成,一个是成员和方法声明的头文件(.h),一个是类方法实现的文件(.m)文件。 Objective-C最基础语法之Class定义是本文要介绍的内容,Objective-C是面向对象的语

在工程.h 文件了定义了变量,依然在.cpp文件里报 未声明的变量,无法识别的标识符错误

实际应用中总会遇到各种错误,比如我在.h文件里定义了一个结构体,并且.cpp文件包含了该头文件,结果在头文件里使用,却无法识别该类型。百思不得其解,后来才发现,原理是这样子的。     1, 我头文件里定义了一个类,类中包含了很多成员变量和成员函数。 源文件里是这些成员函数的实现,成员函数的实现,一般是这样子写的:    返回值类型:MultiBandBlender(定义的类名)::(函数名

【C语言】编程规范——头文件

背景 对于C语言来说,头文件的设计体现了大部分的系统设计。 不合理的头文件布局是编译时间过长的根因,不合理的头文件实际上不合理的设计。 术语定义 依赖 特指编译依赖。若x.h包含了y.h,则称作x依赖y。依赖关系会进行传导,如x.h包含y.h,而y.h又包含了z.h,则x通过y依赖了z。依赖将导致编译时间的上升。虽然依赖是不可避免的,也是必须的,但是不良的设计会导致整个系统的依赖关系无比

extern 声明函数和定义函数

extern 关键字放在函数声明之前: > test.h extern int test(); 如果这样函数的声明中带有关键字extern,仅仅是暗示这个函数可能在别的源文件里定义。 这样一来,就是在程序中取代include “*.h”来声明函数,在一些复杂的项目中,比较习惯在所有的函数声明前添加extern修饰,以防止遗漏包含头文件而导致的编译错误。 extern 关键字放在函数定

05.头文件中定义数组的问题解决办法

在.h文件中定义了数组并初始化,然后在多个.c文件中使用#include "xxx.h",对.h文件中的数组进行访问时, 编译会报错,尽管有#ifndef #define #endif;在定义数组前面加修饰符const也不能解决。 解决办法:在定义数组前面加修饰符static,例如static char img_buf[] = {...};

.h和.c和.cpp多文件包含时候发生的多重定义错误问题(转载)

“error LNK1169: 找到一个或多个多重定义的符号”的解决方法(转载) 问题描述如下: 有 三个源文件,A.h、B.cpp、C.cpp。 A.h是头文件,其中声明了三个变量a1、a2、 a3。 B.cpp是A.h中所声明的类的实现源代码,C.cpp是主程序文件。B.cpp和C.cpp中均包含头文件 A.h。 在编译时,编译能够通过,但链接时出了问题,出现”err

c语言中函数重名

<br />c语言不支持函数重载。<br />同一作用区域不可以有函数重名,但不同作用区域中允许函数重名。不同作用区域可以通过在不同文件中使用static实现。

关于多个.c和.h文件时的相互调用

假如  有一个头文件 1.h 和源文件1.c       还有一个头文件 2.h和源文件2.c   函数的调用 假如 有一个函数 在1.h 中声明 void xuexi(void)                 在1.c中实现:先包含 #include "1.h"                               void xuexi(void)             

头文件中只能声明变量不能定义变量 而声明变量必须带extern,为什么头文件中变量的声明都没有加

 1.头文件中不可以放变量的定义!一般头文件中只是放变量的声明,因为头文件要被其他文件包含#include,如果把定义放在头文件的话,就不能避免多次定义变量。C++不允许多次定义变量,一个程序中对指定变量的定义只有一次,声明可以无数次。 三个例外:1)值在编译时就已知的const变量的定义可放在头文件中,如:const int num=10;           2)类的定义可放在头文件

C/C++头文件与变量的声明和定义

C/C++头文件与变量的声明和定义最近遇到了变量重复包含的问题,才发现自己有好多知识已经模糊了,真惭愧。首先说下头文件,其实头文件对计算机而言没什么作用,她只是在预编译时在#include的地方展开一下,没别的意义了,头文件主要作用有两个:一是把很多其他文件需要重复使用的函数变量等在此声明,在需要的地方include;二是给使用你函数文件的人看的。那既然是说明,那么头文件里面放的自然就是关于函数,变

c语言中 bool 这个声明在哪个头文件里?

stdbool.h

C++编译与链接(0)-.h与.cpp中的定义与声明

转自 http://www.cnblogs.com/magicsoar/p/3702365.html C++中有的东西需要放在可以在.h文件中定义,有的东西则必须放在.cpp文件中定义,有的东西在不同的cpp文件中的名字可以一样,而有的则不能一样 那么究竟哪些东西可在头文件中定义,声明,哪些东西又必须在.cpp中定义,声明呢?   *以下所有的讨论都是在全局命名空间中(即不

C语言中引用其他模块定义的变量的方法

假定A模块有一个变量int g_nVarA需要给别的模块引用,其方法为: 1)在A.c源文件中定义变量: int g_nVarA; 2)在A.h头文件中申明该变量: extern int g_nVarA; 3)所有需要用到该变量的模块包含A的头文件: #include "A.h" 这样,既可以引用g_nVarA变量,又可以避免重复定义。

立即提问
相关内容推荐