单片机 C语言,如何调用外部自定义函数。

自定义一个函数sub,我把它放在1.C,然后主程序INCLUDE之。

1.C 内容

=================
#ifndef __1_C__
#define __1_C__
void sub()

{.....}
#endif
=================
主程序
#include <1.c>
......
extern sub();
main()
{
......
sub();
.....
}

老是提示我重复定义redefinition

如果不用extern sub(); 系统大字提示我
MULTIPLE PUBLIC DEFINITIONS

1.C里面的 #ifxxx 去掉了一个样。求解

函数定义好以后,要被其它函数调用了才能被执行。C 语言的函数是能相互调用的, 但在调用函数前,必须对函数的类型进行说明,就算是标准库函数也不例外。标准库函数的 说明会被按功能分别写在不一样的头文件中,使用时只要在文件最前面用#include 预处理语 句引入相应的头文件。如前面一直有使用的 printf 函数说明就是放在文件名为 stdio.h 的 头文件中。调用就是指一个函数体中引用另一个已定义的函数来实现所需要的功能,这个时候函 数体称为主调用函数,函数体中所引用的函数称为被调用函数。一个函数体中能调用数个 其它的函数,这些被调用的函数同样也能调用其它函数,也能嵌套调用。笔者本人认为 主函数只是相对于被调用函数而言。在 c51 语言中有一个函数是不能被其它函数所调用的, 它就是 main 主函数。调用函数的一般形式如下:
函数名 (实际参数表) “函数名”就是指被调用的函数。实际参数表能为零或多个参数,多个参数时要用逗
号隔开,每个参数的类型、位置应与函数定义时所的形式参数一一对应,它的作用就是把参 数传到被调用函数中的形式参数,如果类型不对应就会产生一些错误。调用的函数是无参函 数时不写参数,但不能省后面的括号。
在以前的一些例子我们也能看不一样的调用方式:
1.函数语句
如 printf ("Hello World!n"); 这是在 我们的第一个程序中出现的,它以 "Hello
World!n"为参数调用 printf 这个库函数。在这里函数调用被看作了一条语句。
2.函数参数 “函数参数”这种方式是指被调用函数的返回值当作另一个被调用函数的实际参
数,如 temp=StrToInt(CharB(16));CharB 的返回值作为 StrToInt 函数的实际参数传递。
3.函数表达式
而在上一篇的例子中有 temp = Count();这样一句,这个时候函数的调用作为一个运算 对象出现在表达式中,能称为函数表达式。例子中 Count()返回一个 int 类型的返回 值直接赋值给 temp。注意的是这种调用方式要求被调用的函数能返回一个同类型的值, 不然会出现不可预料的错误。
前面说到调用函数前要对被调用的函数进行说明。标准库函数只要用#include 引入已 写好说明的头文件,在程序就能直接调用函数了。如调用的是自定义的函数则要用如下形 式编写函数类型说明
类型标识符 函数的名称(形式参数表); 这样的说明方式是用在被调函数定义和主调函数是在同一文件中。你也能把这些写到
文件名.h 的文件中用#include "文件名.h"引入。如果被调函数的定义和主调函数不是在同 一文件中的,则要用如下的方式进行说明,说明被调函数的定义在同一项目的不一样文件之上, 其实库函数的头文件也是如此说明库函数的,如果说明的函数也能称为外部函数。
extern 类型标识符 函数的名称(形式参数表); 函数的定义和说明是完全不一样的,在编译的角度上看函数的定义是把函数编译存放在
ROM 的某一段地址上,而函数说明是告诉编译器要在程序中使用那些函数并确定函数的地 址。如果在同一文件中被调函数的定义在主调函数之前,这个时候能不用说明函数类型。也就 是说在 main 函数之前定义的函数,在程序中就能不用写函数类型说明了。能在一个函 数体调用另一个函数(嵌套调用),但不允许在一个函数定义中定义另一个函数。还要注意 的是函数定义和说明中的“类型、形参表、名称”等都要相一致。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-05-15

第一,#include <1.c>这种狗血的做法竟然没有提示无法包含么,那不成你还真把这个.c文件放进include路径里了

第二,多文件编译也不是这么用的

追问

你妹的 这系统要逆天啊,竟然不用#include 都可以。这尼玛真颠覆我的世界观啊。

本来觉得你答非所问,不过看了看你的图,真塔玛豁然开朗啊。 看来楼下羊羊兄说的也是对的,只是他没说明白。我也没弄清楚而已。。。

不过我想继续请教一下,如果你#include 实际上都可以不用了,那么你那“SOL_HUANG.h” 有何用?

追答

包含公用宏,顶层函数原型,顶层结构体/联合体定义,版本说明...

本回答被提问者采纳
第2个回答  2013-05-15
extern 用extern
第3个回答  2013-05-15
#include <1.c>
这行不需要吧追问

主程序 在2.C里面。

追答

那也不用包含1.C

单片机 C语言,如何调用外部自定义函数。
在 c51 语言中有一个函数是不能被其它函数所调用的, 它就是 main 主函数。调用函数的一般形式如下:函数名 (实际参数表) “函数名”就是指被调用的函数。实际参数表能为零或多个参数,多个参数时要用逗 号隔开,每个参数的类型、位置应与函数定义时所的形式参数一一对应,它的作用就是把参 数传到...

c语言中怎么调用自己定义的函数?
在使用一个函数之前必须先对他进行声明:\/\/void B();声明B函数的存在。void A(){B();\/\/非法,程序执行到此时并不知道B函数的存在。}void B(){} 或者 include <stdio.h> include <stdlib.h> include <math.h> int fa(int n){ int a;for(a=2;a<=sqrt(n*1.0),n%a!=0;a++);i...

C语言如何调用函数
可以不用声明void main(){int a=1, b=2, c;c = fun(a, b); \/\/ 函数的调用,调用自定义函数fun,其中a,b为实际参数,传递给被调用函数的输入值}\/\/ 自定义函数funint fun(int x, int y) \/\/ 函数首部{ \/\/ {}中的语言为函数体return x>y ?

单片机C语言,如何使用extern
extern 是外部引用,如果是在同一个文件里,不需要,如果变量 或函数定义在另一个文件里才需要。你看看是不是这种情况。

在MSP430单片机进行C语言编程时如何添加自定义头文件
在IAR 中 project->add files...工程->添加文件。。。请参考:http:\/\/wenku.baidu.com\/view\/24844c270722192e4536f691.html ===原创回答专用

单片机C语言头文件 extern "C" 问题
\/\/ void fun(float f );} 这时则按C的语法生成fun的符号,这样在C中可直接调用fun,当然c++也可以用。简单点结论,如果你的所有源程序,全都使用c语言,或者全部都使用c++,可以不用管extern "C"。否则,用c语言写的部分不需要特别处理,用c++写的部分也不需要特别处理,但用c++调用c写的函数,...

51单片机intrinsic.h怎么用
Extern void nop (void)表示其他地方有定义过函数nop(void),此处引用。 首先强调一点。头文件中的定义都不是全局变量,但是因为一直写在开头所以总是被最先编译。如果在xxx.h中定义int key,想在多个文件中使用A.c,B.h,…,编译不会通过。因为头文件中的内容如同照抄在include<xxx.h>处。即...

单片机汇编语言中怎么实现函数的调用啊?
1要知道程序的入口地址,比如是A,把20h里的值给A,这个不多说:mov a,20h 2 lcall SQT 3 知道程序的出口,比如出口是a,b ,于是,mov 20h,a mov 21h,b ok!

为什么在写单片机程序的时候,主函数声明的变量无效?
变量定义放错位置了,c语言要求变量的定义在赋值或有实际意义的语句之前,你放在调用setting()函数之后肯定是错的。C++才支持随意为之定义。

单片机c语言中为什么我调用了一个函数后原来在主函数中的一个变量值变 ...
肯定是调用函数中某个变量使用了与主函数中变量一样的地址。或者,使用了相同的变量。解决方法:在函数中将该变量重新定义一下。

相似回答