第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开发工具应该也支持吧。