久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2798|回復: 0
打印 上一主題 下一主題
收起左側

定義自己的頭文件(C語言)

[復制鏈接]
跳轉到指定樓層
樓主
ID:68618 發表于 2014-11-22 15:52 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
自定義函數庫的方法及應用:

一、2個相關的命令

1、TCC——TC的DOS下的命令行編譯連接工具
2、TLIB——TC的DOS下的庫操作工具

二、1個自定義的函數庫的例子

1、 在TC集成環境下,編一個文件USERADD.C
#define _NO_MAIN
int add(int *a,int *b)
{ int c;
c=(*a)+(*b);
return c;
}
按ALT—F9編譯 生成一個 USERADD.OBJ文件。

2、按F10—F—O 退到DOSSHELL(DOS環境下)
COPY USERADD.OBJ 到 ..\LIB目錄,在\LIB目錄下執行
TLIB USERLIB.LIB+USERADD.OBJ 就生成了一個自己的函數庫 USERLIB,在這個函數庫里就包含了函數模塊 int add(int *a,int *b) 的二進制代碼,F在已經將自定義的函數放進了函數庫,就可以把原文件USERADD.C刪掉不要了。(當然,為了以后維護方便,還是作一個備份為好)。 以后如有其它的函數模塊,也可以編譯后用TLIB 命令加入到這個函數庫里。

3、寫一個包含文件 USER1.H,寫完后COPY到INCLUDE 目錄。內容如下:
int add(int *,int *);

4、作好了以上的自定義函數庫的準備工作,現在就可以使用了。
寫一個程序,取名為ADD-1.C,在程序中調用庫函數add( );
#include<stdio.h>
#include<user1.h>
void main( )
{
int a,b,c;
a=20;b=30;
c=add(&a,&b);
printf(“%d”,c);
}

5、在DOS命令行下,執行 TCC ADD-1.C ..\LIB\USERLIB.LIB 就OK!
運行ADD-1.EXE,可以看到輸出結果 50
=============================================================

注:在DOS下編譯和連接是一件煩心的事情,下面講的方法就可以在TC集成環境下實現編譯和連接。
在上面的第二步中,TLIB命令的執行改為 TLIB CS. LIB+USERADD.OBJ 這里是將自定義函數模塊的二進制代碼加入到 運行時庫CS. LIB里面。(對應不同的編譯模式,選用不同的Cx.LIB)
然后在集成環境下編譯連接 ADD-1.C 就可以了。

附注:CS.LIB 小模式庫
CC.LIB 緊湊模式庫
CM .LIB 中模式庫
CL .LIB 大模式庫
CH .LIB 巨模式庫
(以上五種為運行時庫,無論建立何種程序都要連接這些函數庫)

EMU|FP87:EMU 是浮點數模擬函數庫,而FP87則是當我們具有80X87共處理機時所使用的浮點數函數庫。如果程序中有浮點運算就必須連接這二個函數庫之一,以及MATHx函數庫。
MATHx:數學函數庫。其中x代表s、c、m、l、h字符。

另外,TC 的哪一個庫函數的二進制代碼放在哪一個函數庫里不得而知。但有一點可以肯定,就在這其中的庫里面。


文章2
一些初學C語言的人,不知道頭文件(*.h文件)原來還可以自己寫的。只知道調用系統庫 函數時,要使用#include語句將某些頭文件包含進去。其實,頭文件跟.C文件一樣,是可以自己寫的。頭文件是一種文本文件,使用文本編輯器將代碼編寫好之后,以擴展名.h保存就行了。頭文件中一般放一些重復使用的代碼,例如函數聲明,變量聲明,常數定義,宏的定義等等。當使用#include語句將頭文件引用時,相當于將頭文件中所有內容,復制到#include處。為了避免因為重復引用而導致的編譯錯誤,頭文件常具有
#ifndef   LABEL
#define   LABEL
   //代碼部分
#endif
的格式。其中,LABEL為一個唯一的標號,命名規則跟變量的命名規則一樣。常根據它所在的頭文件名來命名,例如,如果頭文件的文件名叫做hardware.h,
那么可以這樣使用:
#ifndef   __HARDWARE_H__
#define   __HARDWARE_H__
  //代碼部分
#endif
這樣寫的意思就是,如果沒有定義__HARDWARE_H__,則定義__HARDWARE_H__,并編譯下面的代碼部分,直到遇到#endif。這樣,當重復引用時,由于__HARDWARE_H__已經被定義,則下面的代碼部分就不會被編譯了,這樣就避免了重復定義。
另外一個地方就是使用include時,使用引號與尖括號的意思是不一樣的。使用引號(“”)時,首先搜索工程文件所在目錄,然后再搜索編譯器頭文件所在目錄。而使用尖括號(<>)時,剛好是相反的搜索順序。假設我們有兩個文件名一樣的頭文件hardware.h,但內容卻是不一樣的。一個保存在編譯器指定的頭文件目錄下,我們把它叫做文件I;另一個則保存在當前工程的目錄下,我們把它叫做文件II。如果我們使用的是#include <hardware.h>,則我們引用到的是文件I。如果我們使用的是#include “hardware.h”,則我們引用的將是文件II。筆者以前就遇到過一個同事問,為什么他修改了那個頭文件里面的內容,好象跟沒有修改一樣?就是因為他有兩個一樣的頭文件(就像我們剛描述的那樣),他是使用#include<hardware.h>引用的,而他修改時,卻是當前工程所在的目錄下的那個文件                                                                                             
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 美女网站视频免费黄 | 精品久久久久久久人人人人传媒 | 91免费电影| 中文字幕日韩一区 | 欧美一区二不卡视频 | 三级黄片毛片 | 在线观看中文字幕视频 | 国产精品3区 | 欧美日韩成人在线 | 久久一区二区三区四区五区 | 亚洲福利av | 中文字幕在线观看精品 | 国产精品无码专区在线观看 | 久久久亚洲精品视频 | 欧美一区二区三区在线看 | 欧美黄在线观看 | 成年女人免费v片 | 在线观看国产精品一区二区 | 国产一区二区三区在线 | 国产精品毛片av | 久久久久亚洲精品国产 | 精品熟人一区二区三区四区 | 国产免费又黄又爽又刺激蜜月al | 三级av在线| 精品自拍视频 | 日本不卡一区 | 日韩免费毛片视频 | 国产在线观看一区二区 | 免费一级毛片 | 久久久五月天 | 日韩av成人在线 | 久久久免费精品 | 国产精品无码久久久久 | 国产精品久久久久久久久久三级 | 午夜视频导航 | 久久99深爱久久99精品 | 国产精品视频yy9299一区 | 国产精品欧美一区二区三区不卡 | 一区二区不卡高清 | 精品一区av | www.久久久久久久久久久久 |