头文件其实就是类似<stdio.h>这样的.h文件,和c一样,但需要放在规定目录当中,文件中放置了一些函数声明,变量声明,常数定义,宏的定义等等。当使用#include语句将头文件引用时,就等价于将头文件中所有内容,复制到#include处。头文件的格式通常为:
#ifndef DELAY_H
#define DELAY_H
//代码部分
#endif
的格式。
其中,DELAY为一个唯一的标号,命名规则跟变量的命名规则一样。常根据它所在的头文件名来命名,例如,如果头文件的文件名叫做stc15w.h,那么可以这样使用:
#ifndef 1
#define 1
//代码部分
#endif
这样写的意思就是,如果没有定义1,1,并编译下面的代码部分,直到遇到#endif。这样,当重复引用时,由于1已经被定义,则下面的代码部分就不会被编译了,这样就避免了重复定义。另外,使用#include时,使用引号“”与尖括号<>的意思是不一样的。使用引号“”时,首先搜索工程文件所在目录,然后再搜索编译器头文件所在目录;而使用尖括号< >时,刚好是相反的搜索顺序。
假设我们有两个文件名一样的头文件1.h,但内容却是不一样的。一个保存在编译器指定的头文件目录下,我们把它叫做文件I;另一个则保存在当前工程的目录下,我们把它叫做文件II。如果我们使用的是#include <>,则我们引用到的是文件I。如果我们使用的是#include “1.h”,则我们引用的将是文件II。
/*--------------------------------------------------------------------------
INTRINS.H
Intrinsic functions for C51.
Copyright (c) 1988-2010 Keil Elektronik GmbH and ARM Germany GmbH
All rights reserved.
--------------------------------------------------------------------------*/
#ifndef __INTRINS_H__
#define __INTRINS_H__
#pragma SAVE
#if defined (__CX2__)
#pragma FUNCTIONS(STATIC)
/* intrinsic functions are reentrant, but need static attribute */
#endif
extern void _nop_ (void);
extern bit _testbit_ (bit);
extern unsigned char _cror_ (unsigned char, unsigned char);
extern unsigned int _iror_ (unsigned int, unsigned char);
extern unsigned long _lror_ (unsigned long, unsigned char);
extern unsigned char _crol_ (unsigned char, unsigned char);
extern unsigned int _irol_ (unsigned int, unsigned char);
extern unsigned long _lrol_ (unsigned long, unsigned char);
extern unsigned char _chkfloat_(float);
#if defined (__CX2__)
extern int abs (int);
extern void _illop_ (void);
#endif
#if !defined (__CX2__)
extern void _push_ (unsigned char _sfr);
extern void _pop_ (unsigned char _sfr);
#endif
#pragma RESTORE
#endif
pragma用于指定一些编译信息:
(1) #pragma message 用于自定义编译信息
(2)#pragma once 用于保证头文件只被编译一次
(3)#pragama pack用于指定内存对齐(一般用在结构体)