问一个C语言的问题

我现在程序写大了,想把一些子程序写成头文件形式,该怎么写,我试着写了写,老出错,本来程序是没有错的,分开写就出错了。

1. 是不是该把子程序和子程序的定义分开来写,我想把子程序和子程序的定义写到一起,就老出错,出错原因是重复定义,该咋办。

2.子程序的定义里面,是不是还应该加
#define uint unsigned int
#define uchar unsigned char

这两句话的意思是啥。

3.中断呀之类的子程序,是不是何其它子程序的方法一样。

4.我现在就是把一个中断的函数放到头文件里面时,出错了,出错原因是:
left side of asn-op not an lvalue 和“yue” undifined identifier,就这两种错误出来一大片,本来正确的函数,是哪出错了。

5.把函数放到头文件里应该注意什么。
现在遇到一个问题,在定义以下这个时候,
char Fifo[];
出错,错误是reference made to unresolved external symbol,Fifo

char Fifo[20];但是这样定义时候就没错,程序能跑。

但是char Fifo[30];就会出错,错误是:
public refers to ignored segment,

只要超过20就不行,哪位高手高如我该咋样定义,上面的问题都解决了,谁回答这个问题,我把分给谁。

关键是,我这个是个子程序,单个运行没问题,一放到主程序里,就出错了,就是那个Fifo,我用来存数据,啥是转存,该咋解决

1、应该分开写,一个在头文件,一个在.c文件。如果分要一起,可以用.c,但是一定要使用包含include

2、#define uint unsigned int
#define uchar unsigned char
都是宏定义,使用unsighde int替换uint
使用unsigned char 替换uchar。写的不正规,建议采用大写来定义宏。例如:UINT UCHAR

3、中断子程序的内部方法一样,但是调用是由系统做的,所以,你要有开中断语句。或者你自己轮询检测中断标志位也可以。至于开中断语句要具体看你是什么中断。

4、第一个出错原因是中断函数不可以放在头文件中,头文件的内容是在连接的时候一起并入程序的。第二个错误,你可能单词拼写错误,yue这个词。你可以用ctrl+F进行查找。

5、应该注意,不要重复包含。头文件要右#ifndef #define #endif
并入函数尽量只写函数声明,在.c里面写函数体。

在c语言里是可以改成.c的,但是采用,一个头文件一个定义文件比较好。

意思就是:多余部分,忽视覆盖过程.

大哥,你这么折腾,我们都要废了。不能超过20的原因可能是你的FIFO转存器的大小就这么大。超过就溢出了呗
FIFO就是转存器,其实就是存储器,用来缓冲数据的。如果不是溢出问题,那就真不可能了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-03-27
1 你把子程序写在头文件里 其他子程序在调用他的时候需要include这个头文件
2 #define uint unsigned int
#define uchar unsigned char
是宏定义 遇到uint 就自动替换成为unsigned int
3 中断之类的子程序是一样的
4 yue是个错误的地方你仔细检查一下 看有没有少些字母之类的
5 没有特别注意的 其实都一样 只是调用的时候include这个头文件就可以了

回答补充:是不是主程序里定义的变量,子程序就不能用 如果你都要可以用就用全局变量 但是这得是在一个文件中
你不管用什么方法 只要用include应该都是可以的!
第2个回答  2009-03-27
头文件定义中要用
#ifndef _XXX_H_
#define _XXX_H_
#endif

变量定义放在源文件中不要放在头文件了,如果在其他文件引用用 extern 定义一下。

如果不想这样就看下面的,把变量与函数都可以定义在头文件中,然后每个函数每个变量都加上 EXT
#ifndef _XXX_
#define EXT extern
#else
#define EXT
#endif

利用上面的定义在有源变量和函数定义实现的文件中定义 _XXX_
#define _XXX_
在其他文件中不要定义_XXX_
这样就可以根据需要程序自动加上 extern了。
第3个回答  2009-03-28
我现在程序写大了,想把一些子程序写成头文件形式,该怎么写,我试着写了写,老出错,本来程序是没有错的,分开写就出错了。

1. 是不是该把子程序和子程序的定义分开来写,我想把子程序和子程序的定义写到一起,就老出错,出错原因是重复定义,该咋办。
回答: 将程序分成头文件和源文件,头文件存放,类型和函数的声名,源文件里面放函数的定义
同一个函数只能定义一次, 如果出现多次被认为重复定义
如果你可以这样写
//test.H file,这里我只放了声明
void test();

//test.c file,这里只放了定义
#include "test.h"
#include <stdio.h>
void test()
{
printf("test\n");
}

//main.c,这里引用
#include "test.h"
void main()
{
test();
}

2.子程序的定义里面,是不是还应该加
#define uint unsigned int
#define uchar unsigned char

这两句话的意思是啥。
回答:这两句就是将uint,和uchar的地方直接替换成后面得unsigned int/char,但是这样的使用是有争议的
最好使用typedef对 类型进行重定义,因为宏本身就不太安全
typedef unsigned int uint;
typedef unsigned char uchar;
以后使用uint就是指unsigned int了,就是起了个别名

3.中断呀之类的子程序,是不是何其它子程序的方法一样。
回答:这个应该没有什么区别

4.我现在就是把一个中断的函数放到头文件里面时,出错了,出错原因是:
left side of asn-op not an lvalue 和“yue” undifined identifier,就这两种错误出来一大片,本来正确的函数,是哪出错了。
回答:c编译器可能要使用的asm不大一样,这个最好找个参考资料

5.把函数放到头文件里应该注意什么。
问题补充:现在遇到一个问题,在定义以下这个时候,
char Fifo[];
出错,错误是reference made to unresolved external symbol,Fifo
char Fifo[20];但是这样定义时候就没错,程序能跑。

但是char Fifo[30];就会出错,错误是:
public refers to ignored segment,

只要超过20就不行,哪位高手高如我该咋样定义,上面的问题都解决了,谁回答这个问题,我把分给谁。

关键是,我这个是个子程序,单个运行没问题,一放到主程序里,就出错了,就是那个Fifo,我用来存数据,啥是转存,该咋解决

回答:不要把变量定义放在头文件,坚决抵制,那管你放c文件里面呢
第4个回答  2009-03-29
你可以在main函数所在的可执行程序中添加函数声明时在每一个声明前面加上extern。例如有个现在有个函数叫void str_echo(int sockfd);
你可以这样声明:extern void str_echo(int sockfd);
这是在UNIX中编程使用的,其他标准C开发工具应该也支持吧。
相似回答