头文件注释
简述c++程序的基本结构。

简述c++程序的基本结构。
C++程序的基本结构主要由以下几个部分组成:1. 注释:用于向程序中插入注释,解释代码的作用和功能。
- 单行注释:以“//”开头,注释内容写在“//”后面。
- 多行注释:以“/*”开头,以“*/”结尾,注释内容写在“/*”和“*/”之间。
- 文档注释:以“/**”开头,以“*/”结尾,注释内容写在“/**”和“*/”之间。
2. 头文件包含(Include):用于引入其他头文件,以便在程序中使用其定义的类、函数等。
- 使用尖括号<>引用标准库的头文件,例如#include<iostream>。
- 使用双引号""引用用户自定义的头文件,例如#include "myheader.h"。
3. 全局变量声明:用于声明在整个程序中都可见的变量。
全局变量的作用域从声明的位置开始,到文件末尾结束。
4. 函数声明:用于在程序中定义函数,包括函数的返回值类型、函数名、参数列表等。
5. 主函数(main function):是C++程序的入口点,程序从主函数开始执行。
- 主函数的定义格式为:int main() { /* 程序代码 */ }6. 变量定义和赋值:用于定义变量并给其赋初值。
例如:int x = 10;。
7. 语句(Statements):C++程序包含一系列语句,每条语句都以分号;结束。
- 常见的语句包括条件语句(if-else)、循环语句(for、while)、跳转语句(break、continue)等。
8. 函数定义:用于实现函数的具体功能,函数定义包括函数的返回值类型、函数名、参数列表和函数体。
9. 类定义:用于定义类及其成员函数和成员变量。
类是C++中的一种自定义数据类型,它封装了数据和操作数据的方法。
10. 对象实例化:通过类创建对象,并调用对象的成员函数和成员变量。
11. 返回值:主函数通过return语句返回一个整数值给操作系统,表示程序的执行结果。
[最新]msp430头文件说明说明
![[最新]msp430头文件说明说明](https://img.taocdn.com/s3/m/57f048d8a0c7aa00b52acfc789eb172ded6399f7.png)
msp430头文件解释说明//1MSP430F149祥解对头文件做了比较详细的注释,记不清寄存器的人可以看看#ifndef __msp430x14x#define __msp430x14x/********************************************************** *** STANDARD BITS*********************************************************** */#define BIT0 0x0001#define BIT1 0x0002#define BIT2 0x0004#define BIT3 0x0008#define BIT4 0x0010#define BIT5 0x0020#define BIT6 0x0040#define BIT7 0x0080#define BIT8 0x0100#define BIT9 0x0200#define BITA 0x0400#define BITB 0x0800#define BITC 0x1000#define BITD 0x2000#define BITE 0x4000#define BITF 0x8000/********************************************************** *** STATUS REGISTER BITS*********************************************************** */#define C 0x0001#define Z 0x0002#define N 0x0004#define V 0x0100#define GIE 0x0008#define CPUOFF 0x0010#define OSCOFF 0x0020#define SCG0 0x0040#define SCG1 0x0080/* Low Power Modes coded with Bits 4-7 in SR */#ifndef __IAR_SYSTEMS_ICC /* Begin #defines for assembler */#define LPM0 CPUOFF#define LPM1 SCG0+CPUOFF#define LPM2 SCG1+CPUOFF#define LPM3 SCG1+SCG0+CPUOFF#define LPM4 SCG1+SCG0+OSCOFF+CPUOFF/* End #defines for assembler */#else /* Begin #defines for C */#define LPM0_bits CPUOFF#define LPM1_bits SCG0+CPUOFF#define LPM2_bits SCG1+CPUOFF#define LPM3_bits SCG1+SCG0+CPUOFF#define LPM4_bits SCG1+SCG0+OSCOFF+CPUOFF#include <In430.h>#define LPM0 _BIS_SR(LPM0_bits) /* Enter Low Power Mode 0 */#define LPM0_EXIT _BIC_SR(LPM0_bits) /* Exit Low Power Mode 0 */#define LPM1 _BIS_SR(LPM1_bits) /* Enter Low Power Mode 1 */#define LPM1_EXIT _BIC_SR(LPM1_bits) /* Exit Low Power Mode 1 */#define LPM2 _BIS_SR(LPM2_bits) /* Enter Low Power Mode 2 */#define LPM2_EXIT _BIC_SR(LPM2_bits) /* Exit Low Power Mode 2 */#define LPM3 _BIS_SR(LPM3_bits) /* Enter Low Power Mode 3 */#define LPM3_EXIT _BIC_SR(LPM3_bits) /* Exit Low Power Mode 3 */#define LPM4 _BIS_SR(LPM4_bits) /* Enter Low Power Mode 4 */#define LPM4_EXIT _BIC_SR(LPM4_bits) /* Exit Low Power Mode 4 */#endif /* End #defines for C *//********************************************************** *** PERIPHERAL FILE MAP*********************************************************** *//********************************************************** *** 特殊功能寄存器地址和控制位*********************************************************** *//*中断使能1*/#define IE1_ 0x0000sfrb IE1 = IE1_;#define WDTIE 0x01 /*看门狗中断使能*/#define OFIE 0x02 /*外部晶振故障中断使能*/#define NMIIE 0x10 /*非屏蔽中断使能*/#define ACCVIE 0x20 /*可屏蔽中断使能/flash 写中断错误*/#define URXIE0 0x40 /*串口0接收中断使能*/#define UTXIE0 0x80 /*串口0发送中断使能*//*中断标志1*/#define IFG1_ 0x0002sfrb IFG1 = IFG1_;#define WDTIFG 0x01 /*看门狗中断标志*/#define OFIFG 0x02 /*外部晶振故障中断标志*/ #define NMIIFG 0x10 /*非屏蔽中断标志*/#define URXIFG0 0x40 /*串口0接收中断标志*/#define UTXIFG0 0x80 /*串口0发送中断标志*//* 中断模式使能1 */#define ME1_ 0x0004sfrb ME1 = ME1_;#define URXE0 0x40 /* 串口0接收中断模式使能 */#define USPIE0 0x40 /* 同步中断模式使能*/#define UTXE0 0x80 /* 串口0发送中断模式使能 *//* 中断使能2 */#define IE2_ 0x0001sfrb IE2 = IE2_;#define URXIE1 0x10 /* 串口1接收中断使能*/#define UTXIE1 0x20 /* 串口1发送中断使能*//* 中断标志2 */#define IFG2_ 0x0003sfrb IFG2 = IFG2_;#define URXIFG1 0x10 /* 串口1接收中断标志*/#define UTXIFG1 0x20 /* 串口1发送中断标志*//* 中断模式使能2 */#define ME2_ 0x0005sfrb ME2 = ME2_;#define URXE1 0x10 /* 串口1接收中断模式使能 */#define USPIE1 0x10 /* 同步中断模式使能*/#define UTXE1 0x20 /* 串口1发送中断模式使能 *//********************************************************** *** 看门狗定时器的寄存器定义*********************************************************** */#define WDTCTL_ 0x0120sfrw WDTCTL = WDTCTL_;#define WDTIS0 0x0001 /*选择WDTCNT的四个输出端之一*/#define WDTIS1 0x0002 /*选择WDTCNT的四个输出端之一*/#define WDTSSEL 0x0004 /*选择WDTCNT的时钟源*/#define WDTCNTCL 0x0008 /*清除WDTCNT端: 为1时从0开始计数*/#define WDTTMSEL 0x0010 /*选择模式 0: 看门狗模式; 1: 定时器模式*/#define WDTNMI 0x0020 /*选择NMI/RST 引脚功能 0:为 RST; 1:为NMI*/#define WDTNMIES 0x0040 /*WDTNMI=1时.选择触发延 0:为上升延 1:为下降延*/#define WDTHOLD 0x0080 /*停止看门狗定时器工作 0:启动;1:停止*/#define WDTPW 0x5A00 /* 写密码:高八位*//* SMCLK= 1MHz定时器模式 */#define WDT_MDLY_32 WDTPW+WDTTMSEL+WDTCNTCL /* TSMCLK*2POWER15=32ms 复位状态 */#define WDT_MDLY_8 WDTPW+WDTTMSEL+WDTCNTCL+WDTIS0 /* TSMCLK*2POWER13=8.192ms " */#define WDT_MDLY_0_5 WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1 /* TSMCLK*2POWER9=0.512ms " */#define WDT_MDLY_0_064WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1+WDTIS0 /*TSMCLK*2POWER6=0.512ms " *//* ACLK=32.768KHz 定时器模式*/#define WDT_ADLY_1000 WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL /* TACLK*2POWER15=1000ms " */#define WDT_ADLY_250WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS0 /*TACLK*2POWER13=250ms " */#define WDT_ADLY_16WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1 /*TACLK*2POWER9=16ms " */#define WDT_ADLY_1_9WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1+WDTIS0 /*TACLK*2POWER6=1.9ms " *//* SMCLK=1MHz看门狗模式 */#define WDT_MRST_32 WDTPW+WDTCNTCL /* TSMCLK*2POWER15=32ms 复位状态 */#define WDT_MRST_8 WDTPW+WDTCNTCL+WDTIS0 /* TSMCLK*2POWER13=8.192ms " */#define WDT_MRST_0_5 WDTPW+WDTCNTCL+WDTIS1 /* TSMCLK*2POWER9=0.512ms " */#define WDT_MRST_0_064 WDTPW+WDTCNTCL+WDTIS1+WDTIS0 /* TSMCLK*2POWER6=0.512ms " *//* ACLK=32KHz看门狗模式 */#define WDT_ARST_1000 WDTPW+WDTCNTCL+WDTSSEL /* TACLK*2POWER15=1000ms " */#define WDT_ARST_250 WDTPW+WDTCNTCL+WDTSSEL+WDTIS0 /* TACLK*2POWER13=250ms " */#define WDT_ARST_16 WDTPW+WDTCNTCL+WDTSSEL+WDTIS1 /* TACLK*2POWER9=16ms " */#define WDT_ARST_1_9WDTPW+WDTCNTCL+WDTSSEL+WDTIS1+WDTIS0 /*TACLK*2POWER6=1.9ms " *//************************************************************硬件乘法器的寄存器定义************************************************************/#define MPY_ 0x0130 /* 无符号乘法 */sfrw MPY = MPY_;#define MPYS_ 0x0132 /* 有符号乘法*/sfrw MPYS = MPYS_;#define MAC_ 0x0134 /* 无符号乘加 */sfrw MAC = MAC_;#define MACS_ 0x0136 /* 有符号乘加 */sfrw MACS = MACS_;#define OP2_ 0x0138 /* 第二乘数 */sfrw OP2 = OP2_;#define RESLO_ 0x013A /* 低6位结果寄存器 */sfrw RESLO = RESLO_;#define RESHI_ 0x013C /* 高6位结果寄存器 */sfrw RESHI = RESHI_;#define SUMEXT_ 0x013E /*结果扩展寄存器 */const sfrw SUMEXT = SUMEXT_;/********************************************************** *** DIGITAL I/O Port1/2 寄存器定义有中断功能*********************************************************** */#define P1IN_ 0x0020 /* P1 输入寄存器 */const sfrb P1IN = P1IN_;#define P1OUT_ 0x0021 /* P1 输出寄存器 */sfrb P1OUT = P1OUT_;#define P1DIR_ 0x0022 /* P1 方向选择寄存器 */sfrb P1DIR = P1DIR_;#define P1IFG_ 0x0023 /* P1 中断标志寄存器*/sfrb P1IFG = P1IFG_;#define P1IES_ 0x0024 /* P1 中断边沿选择寄存器*/sfrb P1IES = P1IES_;#define P1IE_ 0x0025 /* P1 中断使能寄存器 */sfrb P1IE = P1IE_;#define P1SEL_ 0x0026 /* P1 功能选择寄存器*/ sfrb P1SEL = P1SEL_;#define P2IN_ 0x0028 /* P2 输入寄存器 */const sfrb P2IN = P2IN_;#define P2OUT_ 0x0029 /* P2 输出寄存器 */sfrb P2OUT = P2OUT_;#define P2DIR_ 0x002A /* P2 方向选择寄存器 */sfrb P2DIR = P2DIR_;#define P2IFG_ 0x002B /* P2 中断标志寄存器 */sfrb P2IFG = P2IFG_;#define P2IES_ 0x002C /* P2 中断边沿选择寄存器*/sfrb P2IES = P2IES_;#define P2IE_ 0x002D /* P2 中断使能寄存器 */sfrb P2IE = P2IE_;#define P2SEL_ 0x002E /* P2 功能选择寄存器 */ sfrb P2SEL = P2SEL_;/********************************************************** *** DIGITAL I/O Port3/4寄存器定义无中断功能*********************************************************** */#define P3IN_ 0x0018 /* P3 输入寄存器 */const sfrb P3IN = P3IN_;#define P3OUT_ 0x0019 /* P3 输出寄存器 */sfrb P3OUT = P3OUT_;#define P3DIR_ 0x001A /* P3 方向选择寄存器 */sfrb P3DIR = P3DIR_;#define P3SEL_ 0x001B /* P3 功能选择寄存器*/ sfrb P3SEL = P3SEL_;#define P4IN_ 0x001C /* P4 输入寄存器 */const sfrb P4IN = P4IN_;#define P4OUT_ 0x001D /* P4 输出寄存器 */sfrb P4OUT = P4OUT_;#define P4DIR_ 0x001E /* P4 方向选择寄存器 */sfrb P4DIR = P4DIR_;#define P4SEL_ 0x001F /* P4 功能选择寄存器 */ sfrb P4SEL = P4SEL_;/********************************************************** *** DIGITAL I/O Port5/6 I/O口寄存器定义PORT5和6 无中断功能*********************************************************** */#define P5IN_ 0x0030 /* P5 输入寄存器 */const sfrb P5IN = P5IN_;#define P5OUT_ 0x0031 /* P5 输出寄存器*/sfrb P5OUT = P5OUT_;#define P5DIR_ 0x0032 /* P5 方向选择寄存器*/sfrb P5DIR = P5DIR_;#define P5SEL_ 0x0033 /* P5 功能选择寄存器*/ sfrb P5SEL = P5SEL_;#define P6IN_ 0x0034 /* P6 输入寄存器 */const sfrb P6IN = P6IN_;#define P6OUT_ 0x0035 /* P6 输出寄存器*/sfrb P6OUT = P6OUT_;#define P6DIR_ 0x0036 /* P6 方向选择寄存器*/sfrb P6DIR = P6DIR_;#define P6SEL_ 0x0037 /* P6 功能选择寄存器*/ sfrb P6SEL = P6SEL_;//2/********************************************************** *** USART 串口寄存器"UCTL","UTCTL","URCTL"定义的各个位可串口1 串口2公用*********************************************************** *//* UCTL 串口控制寄存器*/#define PENA 0x80 /*校验允许位*/#define PEV 0x40 /*偶校验为0时为奇校验*/#define SPB 0x20 /*停止位为2 为0时停止位为1*/#define CHAR 0x10 /*数据位为8位为0时数据位为7位*/#define LISTEN 0x08 /*自环模式(发数据同时在把发的数据接收回来)*/#define SYNC 0x04 /*同步模式为0异步模式*/#define MM 0x02 /*为1时地址位多机协议(异步) 主机模式(同步);为0时线路空闲多机协议(异步) 从机模式(同步)*/#define SWRST 0x01 /*控制位*//* UTCTL 串口发送控制寄存器*/#define CKPH 0x80 /*时钟相位控制位(只同步方式用)为1时时钟UCLK延时半个周期*/#define CKPL 0x40 /*时钟极性控制位为1时异步与UCLK相反;同步下降延有效*/#define SSEL1 0x20 /*时钟源选择位:与SSEL0组合为0,1,2,3四种方式*/#define SSEL0 0x10 /*"0"选择外部时钟,"1"选择辅助时钟,"2","3"选择系统子时钟 */#define URXSE 0x08 /*接收触发延控制位(只在异步方式下用)*/#define TXWAKE 0x04 /*多处理器通信传送控制位(只在异步方式下用)*/#define STC 0x02 /*外部引脚STE选择位为0时为4线模式为1时为3线模式*/#define TXEPT 0x01 /*发送器空标志*//* URCTL 串口接收控制寄存器同步模式下只用两位:FE和OE*/#define FE 0x80 /*帧错标志*/ #define PE 0x40 /*校验错标志位*/#define OE 0x20 /*溢出标志位*/#define BRK 0x10 /*打断检测位*/#define URXEIE 0x08 /*接收出错中断允许位*/#define URXWIE 0x04 /*接收唤醒中断允许位*/#define RXWAKE 0x02 /*接收唤醒检测位*/ #define RXERR 0x01 /*接收错误标志位*//********************************************************** *** USART 0 串口0寄存器定义*********************************************************** */#define U0CTL_ 0x0070 /* 串口0基本控制寄存器*/sfrb U0CTL = U0CTL_;#define U0TCTL_ 0x0071 /* 串口0发送控制寄存器 */sfrb U0TCTL = U0TCTL_;#define U0RCTL_ 0x0072 /* 串口0接收控制寄存器 */sfrb U0RCTL = U0RCTL_;#define U0MCTL_ 0x0073 /* 波特率调整寄存器 */sfrb U0MCTL = U0MCTL_;#define U0BR0_ 0x0074 /* 波特率选择寄存器0 */sfrb U0BR0 = U0BR0_;#define U0BR1_ 0x0075 /* 波特率选择寄存器1 */sfrb U0BR1 = U0BR1_;#define U0RXBUF_ 0x0076 /* 接收缓存寄存器 */const sfrb U0RXBUF = U0RXBUF_;#define U0TXBUF_ 0x0077 /* 发送缓存寄存器 */sfrb U0TXBUF = U0TXBUF_;/* 改变的寄存器名定义 */#define UCTL0_ 0x0070 /* UART 0 Control */sfrb UCTL0 = UCTL0_;#define UTCTL0_ 0x0071 /* UART 0 Transmit Control */sfrb UTCTL0 = UTCTL0_;#define URCTL0_ 0x0072 /* UART 0 Receive Control */sfrb URCTL0 = URCTL0_;#define UMCTL0_ 0x0073 /* UART 0 Modulation Control */sfrb UMCTL0 = UMCTL0_;#define UBR00_ 0x0074 /* UART 0 Baud Rate 0 */ sfrb UBR00 = UBR00_;#define UBR10_ 0x0075 /* UART 0 Baud Rate 1 */sfrb UBR10 = UBR10_;#define RXBUF0_ 0x0076 /* UART 0 Receive Buffer */const sfrb RXBUF0 = RXBUF0_;#define TXBUF0_ 0x0077 /* UART 0 Transmit Buffer */ sfrb TXBUF0 = TXBUF0_;#define UCTL_0_ 0x0070 /* UART 0 Control */sfrb UCTL_0 = UCTL_0_;#define UTCTL_0_ 0x0071 /* UART 0 Transmit Control */sfrb UTCTL_0 = UTCTL_0_;#define URCTL_0_ 0x0072 /* UART 0 Receive Control */sfrb URCTL_0 = URCTL_0_;#define UMCTL_0_ 0x0073 /* UART 0 Modulation Control */sfrb UMCTL_0 = UMCTL_0_;#define UBR0_0_ 0x0074 /* UART 0 Baud Rate 0 */sfrb UBR0_0 = UBR0_0_;#define UBR1_0_ 0x0075 /* UART 0 Baud Rate 1 */sfrb UBR1_0 = UBR1_0_;#define RXBUF_0_ 0x0076 /* UART 0 Receive Buffer */ const sfrb RXBUF_0 = RXBUF_0_;#define TXBUF_0_ 0x0077 /* UART 0 Transmit Buffer */sfrb TXBUF_0 = TXBUF_0_;/********************************************************** *** USART 1 串口1寄存器定义*********************************************************** */#define U1CTL_ 0x0078 /* 串口1基本控制寄存器*/sfrb U1CTL = U1CTL_;#define U1TCTL_ 0x0079 /* 串口1发送控制寄存器 */sfrb U1TCTL = U1TCTL_;#define U1RCTL_ 0x007A /* 串口1接收控制寄存器 */sfrb U1RCTL = U1RCTL_;#define U1MCTL_ 0x007B /* 波特率调整控制寄存器 */sfrb U1MCTL = U1MCTL_;#define U1BR0_ 0x007C /* 波特率选择寄存器0 */sfrb U1BR0 = U1BR0_;#define U1BR1_ 0x007D /* 波特率选择寄存器1 */sfrb U1BR1 = U1BR1_;#define U1RXBUF_ 0x007E /* 接收缓存 */const sfrb U1RXBUF = U1RXBUF_;#define U1TXBUF_ 0x007F /* 发送缓存 */ sfrb U1TXBUF = U1TXBUF_;/* 改变的寄存器名定义 */#define UCTL1_ 0x0078 /* UART 1 C。
vscode .h 头文件的规则

VSCode .h 头文件的规则一、引言在使用VSCode进行C/C++开发时,头文件(.h文件)作为程序的重要组成部分,其规范和规则对于代码的结构和可读性至关重要。
本文将介绍VSCode .h头文件的规则,以帮助开发者编写清晰、规范的头文件。
二、文件命名规范1. 头文件应该以.h为扩展名,例如:example.h。
2. 头文件的命名应能清晰反映其所包含的功能或内容,应使用全小写字母,并使用下划线分隔单词,例如:math_functions.h。
三、头文件保护1. 头文件应该使用预编译指令来防止重复包含,以避免编译错误。
2. 可以使用 #ifndef、#define 和 #endif 三个预编译指令来包含整个头文件,例如:```c#ifndef EXAMPLE_H#define EXAMPLE_H// 头文件内容#endif // EXAMPLE_H```四、包含必要的头文件1. 头文件应该包含其所依赖的其他头文件,以确保程序的正确编译和运行。
2. 在包含其他头文件时,应该使用相对路径或绝对路径,以避免混乱和错误的引用。
五、避免定义全局变量和函数1. 头文件应该只包含类型定义、常量定义、函数声明或模板声明,不应该包含全局变量或函数定义。
2. 如果需要定义全局变量或函数,应该在对应的源文件中进行定义,而不是在头文件中。
六、使用 #pragma once1. 为了避免使用传统的宏方式保护头文件的方法,可以使用 #pragma once 指令作为替代。
2. #pragma once 可以确保同一个头文件内容不会被多次包含,避免了传统宏方式可能存在的问题。
七、头文件的内容1. 头文件应该包含适当的注释,以说明头文件的作用、包含的内容和使用方法。
2. 头文件中的类型定义、常量定义、函数声明等应该按照一定的结构组织,以增加可读性和易用性。
八、头文件的优化1. 尽量减少头文件的包含内容,只包含必要的内容。
2. 减少对其他头文件的依赖,可减少编译时间和提高代码的可移植性。
c语言中头文件书写格式

在C语言中,头文件(header files)通常包含函数声明和宏定义,它们为源文件(source files)提供信息。
头文件以`.h`为后缀,通常采用简单的文本格式进行编写。
下面是一个示例,展示了C语言头文件的基本书写格式:```c/* 这是注释,用于说明头文件的目的和内容*/#ifndef HEADER_FILE_NAME_H // 如果未定义HEADER_FILE_NAME_H#define HEADER_FILE_NAME_H // 定义HEADER_FILE_NAME_H/* 在这里声明函数和定义宏*/// 函数声明示例void function_name(parameter_type parameter_name);// 宏定义示例#define MACRO_NAME value#endif /* HEADER_FILE_NAME_H */```这是一个典型的C语言头文件模板。
下面是对各个部分的解释:1. **注释**:头文件的顶部通常包含注释,用于解释头文件的目的和内容。
2. **防止头文件重复包含的保护**:这一部分确保头文件不会被重复包含。
`#ifndef`、`#define` 和`#endif` 是预处理器指令,它们在头文件被包含时确保只有一次定义。
`HEADER_FILE_NAME_H` 是你自己定义的名称,通常采用大写字母和下划线命名法。
3. **函数声明**:函数声明在头文件中以原型形式出现,告诉编译器函数的名称、返回类型以及参数。
例如,`void function_name(parameter_type parameter_name);` 是一个函数声明的示例。
4. **宏定义**:使用`#define` 预处理器指令可以定义宏。
例如,`#define MACRO_NAME value` 定义了一个名为`MACRO_NAME` 的宏,其值为`value`。
5. **结束保护**:最后再次使用`#endif` 来结束防止重复包含的保护。
C++注释规范

? 如果使用第三方工具应有相关的文档及使用说明。
? 编码期间产生的调试或测试工具应有相关的说明,如果有源代码的应该提供源代码。
? 须有运行及开发环境的配置说明文档。
? 须有对文档、代码、工具文件进行说明的清单。
? 类成员变量使用m_前缀,例如int m_nItemCont;
? 全局变理使用g_前缀,例如:int g_nItemCont;
? 通用的类型缩写用为变量的前缀,指针变量在类型前缀前加上前缀p,例如:int nVariant; 其中的n代表整型,禁止使用自定义类型的缩写作为变量名前缀;char* pszVariant;其中 p表示指针,sz表示类型为0结尾的字符串类型。
? 每个分号结最多占一行。
? { 和 } 独占一行。
? 操作符之前后加一个空格
? 逗号和 ( 后面加一个空格
? 尽量不要使用指针
? 包括结构体以及数组变量等所有的变量使用前要初始化
? 内存分配遵循谁申请谁释放的原则
? 尽量使用单线程
? 所有变量初始化后再使用,变量定义集中在函数头部或类的尾部或文件的头部
*@file 文件名,存储编码格式说明(ANSI、UNICODE、UTF8等)
*@brief 概要说明
*@author 作者1姓名或者工号
*@version 版本
*@date 创建及修改日期
*@warning 警示说明(如果有的话)
*@History: 修改历史记录列表,每行修改记录应包括修改日期、修改者及修改内容简述
2.2. 命名
使用匈牙利命名法,另外:
PIC16F877A头文件中文注释

#ifndef _HTC_H_#warning Header file pic168xa.h included directly. Use #include <htc.h> instead. #endif/** Microchip单片机的头文件* PIC 16F873A chip* PIC 16F874A chip* PIC 16F876A chip* PIC 16F877A chip* 中档单片机*/#if defined(_16F874A) || defined(_16F877A)#define __PINS_40#endifvolatile unsigned char INDF @ 0x00;//间接寻址寄存器volatile unsigned char TMR0 @ 0x01;//定时器0volatile unsigned char PCL @ 0x02;//低8位程序计数器volatile unsigned char STATUS @ 0x03;//程序状态寄存器volatile unsigned char FSR @ 0x04;//特殊功能寄存器volatile unsigned char PORTA @ 0x05;//端口A寄存器volatile unsigned char PORTB @ 0x06;//端口B寄存器volatile unsigned char PORTC @ 0x07;//端口C寄存器#ifdef __PINS_40volatile unsigned char PORTD @ 0x08;//端口D寄存器volatile unsigned char PORTE @ 0x09;//端口E寄存器#endifvolatile unsigned char PCLATH @ 0x0A;//高5位程序计数器volatile unsigned char INTCON @ 0x0B;//中断控制寄存器volatile unsigned char PIR1 @ 0x0C;//中断标志寄存器PIR1volatile unsigned char PIR2 @ 0x0D;//中断标志寄存器PIR2volatile unsigned char TMR1L @ 0x0E;//T1低字节计数寄存器volatile unsigned char TMR1H @ 0x0F;//T1高字节计数寄存器volatile unsigned char T1CON @ 0x10;//TMR1控制寄存器volatile unsigned char TMR2 @ 0x11;//定时/计数器TMR2volatile unsigned char T2CON @ 0x12;//TMR2控制寄存器volatile unsigned char SSPBUF @ 0x13;//收/发数据缓冲器volatile unsigned char SSPCON @ 0x14;/*同步串口控制寄存器,对MSSP模块的功能和指标进行设置和定义*/volatile unsigned char CCPR1L @ 0x15;//捕获/比较/PWM寄存器低字节volatile unsigned char CCPR1H @ 0x16;//捕获/比较/PWM寄存器低字节volatile unsigned char CCP1CON @ 0x17;//CCP1CON寄存器volatile unsigned char RCSTA @ 0x18;//USART接收控制兼状态寄存器volatile unsigned char TXREG @ 0x19;//USART发生缓冲器volatile unsigned char RCREG @ 0x1A;//USART接收缓冲器volatile unsigned char CCPR2L @ 0x1B;//捕获/比较/PWM寄存器低字节volatile unsigned char CCPR2H @ 0x1C;//捕获/比较/PWM寄存器低字节volatile unsigned char CCP2CON @ 0x1D;//CCP2CON寄存器volatile unsigned char ADRESH @ 0x1E;//ADC转换结果寄存器高字节volatile unsigned char ADCON0 @ 0x1F;//A/D转换器开关位/* bank 1 registers */volatile unsigned char OPTION @ 0x81;/*/选择寄存器,用于配置TMR0/WDT预分频系数、外部INT中断、TMR0和端口B的弱上拉。
c文件的组成
c文件的组成
c文件是一种常见的计算机文件格式,通常用于存储C语言源代码。
一个C文件通常由以下几个组成部分:
1. 头文件:头文件是用来包含其他文件中声明的函数和变量的代码段。
头文件通常以'.h'为后缀,可以包含多个函数的声明和宏定义。
2. 全局变量:在C文件中,全局变量是定义在函数外部,可以被整个程序使用的变量。
全局变量可以在程序的任何地方被修改和访问,因此通常需要谨慎使用。
3. 函数:C文件中的函数是用来执行特定任务的代码段。
函数可以被其他函数或程序调用,可以返回一个值或者不返回任何值。
一个C文件可以包含多个函数。
4. 注释:注释是用来解释代码的文字信息,不会被编译器解释为代码。
注释可以提高代码的可读性和可维护性,减少代码出错的可能性。
5. 空白符和分隔符:C文件中的空白符和分隔符包括空格、制表符、回车符、换行符等,用来分隔不同的代码段,使代码易于阅读和理解。
总之,一个C文件的组成部分包括头文件、全局变量、函数、注释、空白符和分隔符等。
了解C文件的组成,可以帮助开发者更好地编写和维护代码。
- 1 -。
头文件注释标准
头文件注释标准头文件注释是编程中非常重要的一部分,它能够提供关于头文件(.h文件)中声明的类、函数、结构等信息的文档说明。
以下是一些常见的头文件注释标准,但请注意,具体标准可能因项目、团队或编码规范而有所不同。
C++ 头文件注释标准示例:```cpp#ifndef MY_HEADER_FILE_H#define MY_HEADER_FILE_H/* @file my_header_file.h* @brief Brief description of the contents of the file.** Detailed description, if necessary. This can include information* about the purpose of the file, important classes, functions, or* data structures declared in the file.*/// Includes, if necessary// Forward declarations, if necessarynamespace MyNamespace {/* @class MyClass* @brief Brief description of the class.** Detailed description, including important member functions and* data members. Include any preconditions or usage guidelines.*/class MyClass {public:// Public member functions and data membersprivate:// Private member functions and data members};} // namespace MyNamespace/* @brief Brief description of the global function.** Detailed description, if necessary. Include information about* parameters, return values, and any exceptions thrown.** @param param1 Description of parameter 1.* @param param2 Description of parameter 2.* @return Description of the return value.*/int globalFunction(int param1, int param2);#endif // MY_HEADER_FILE_H```注释标准解释:1. 文件保护符:`#ifndef`, `#define`, `#endif` 防止头文件被重复包含。
C语言程序注释模板
C语言程序注释模板篇一:C语言编写规范之注释1、头文件包含Includes2、私有类型定义 Private typedef3、私有定义Private define4、私有宏定义 Private macro5、私有变量 Private variables6、私有函数原型Private function prototypes7、私有函数Private functions8、私有函数前注释/***************************************************** *************************** Function Name : FSMC_NOR_Init* Description : Configures the FSMC and GPIOs to interface with the NOR memory. *This function must be called before anywrite/read operation*on the NOR.* Input : None* Output: None* Return: None****************************************************** *************************/9、程序块采用缩进风格编写,缩进空格为4。
10、相对独立的程序块之间、变量说明之后必须加空行;11、较长的字符(>80字符)要分成多行书写,长表达式要在低优先级操作符划分新行,操作符放在新行之首,新行要恰当缩进,保持排版整齐;12、循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分,长表达式要在低优先级操作符处划分新行,操作符放在新行之首;13、若函数或过程中的参数较长,则要进行适当的划分。
14、不允许把多个短语句写在一行中,即一行只写一条语句。
c,注释规范
竭诚为您提供优质文档/双击可除c,注释规范篇一:c语言编写规范之注释1、头文件包含includes2、私有类型定义privatetypedef3、私有定义privatedefine4、私有宏定义privatemacro5、私有变量privatevariables6、私有函数原型privatefunctionprototypes7、私有函数privatefunctions8、私有函数前注释/************************************************** ******************************Functionname:Fsmc_noR_init*description:configurestheFsmcandgpiostointerfacewiththenoRmemory.*thisfunctionmustbecalledbeforeanywr ite/readoperation*onthenoR.*input:none*output:none*Return:none*************************************************** ****************************/9、程序块采用缩进风格编写,缩进空格为4。
10、相对独立的程序块之间、变量说明之后必须加空行;11、较长的字符(>80字符)要分成多行书写,长表达式要在低优先级操作符划分新行,操作符放在新行之首,新行要恰当缩进,保持排版整齐;12、循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分,长表达式要在低优先级操作符处划分新行,操作符放在新行之首;13、若函数或过程中的参数较长,则要进行适当的划分。
14、不允许把多个短语句写在一行中,即一行只写一条语句。
15、if、for、do、while、case、switch、default等语句自占一行,且if、for、do、while等语句的执行语句部分无论多少都要加括号{}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
// sphere.c// Draws a lit, textured sphere// Richard S. Wright Jr.// OpenGL SuperBible#include <stdio.h>// For best results, put this in a display list// Draw a sphere at the originvoid gltDrawSphere(GLfloat fRadius, GLint iSlices, GLint iStacks) 画球的函数,用的是Richard wright的函数。
第一个值是半径,第二个和第三个是两个方向的切的份数{GLfloat drho = (GLfloat)(3.141592653589) / (GLfloat) iStacks;GLfloat dtheta = 2.0f * (GLfloat)(3.141592653589) / (GLfloat) iSlices;GLfloat ds = 1.0f / (GLfloat) iSlices;GLfloat dt = 1.0f / (GLfloat) iStacks;GLfloat t = 1.0f;GLfloat s = 0.0f;GLint i, j; // Looping variablesfor (i = 0; i < iStacks; i++){GLfloat rho = (GLfloat)i * drho;GLfloat srho = (GLfloat)(sin(rho));GLfloat crho = (GLfloat)(cos(rho));GLfloat srhodrho = (GLfloat)(sin(rho + drho));GLfloat crhodrho = (GLfloat)(cos(rho + drho));// Many sources of OpenGL sphere drawing code uses a triangle fan// for the caps of the sphere. This however introduces texturing// artifacts at the poles on some OpenGL implementationsglBegin(GL_TRIANGLE_STRIP);s = 0.0f;for ( j = 0; j <= iSlices; j++){GLfloat theta = (j == iSlices) ? 0.0f : j * dtheta;GLfloat stheta = (GLfloat)(-sin(theta));GLfloat ctheta = (GLfloat)(cos(theta));GLfloat x = stheta * srho;GLfloat y = ctheta * srho;GLfloat z = crho;glTexCoord2f(s, t); 设置当前的纹理坐标glNormal3f(x, y, z); 设置当前的法向量glVertex3f(x * fRadius, y * fRadius, z * fRadius); 指定一个顶点x = stheta * srhodrho;y = ctheta * srhodrho;z = crhodrho;glTexCoord2f(s, t - dt);s += ds;glNormal3f(x, y, z);glVertex3f(x * fRadius, y * fRadius, z * fRadius);}glEnd();t -= dt;}}#include <stdio.h>#include <stdlib.h>#include <memory.h>#include <string.h>#include "type.h"void mf(TEXTUREIMAGE textureImg, GLuint * texName){glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 像素存储模式,其中GL_UNPACK_ALIGNMENT,指定在内存中的每个像素的行开始的对齐方式的要求。
在允许的值为 1 (字节对齐)、 2 (偶数个字节对齐的行)、 4 (词对齐方式)和8 (双单词边界上的行开始)。
glGenTextures(1,texName); 生成纹理名称glBindTexture(GL_TEXTURE_2D , *texName); 创建绑定到纹理目标的命名纹理glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);设置集纹理参数,其中GL_TEXTURE_WRAP_S是将纹理坐标s 换行参数设置为GL_CLAMP 或GL_REPEAT。
GL_CLAMP 导致的坐标范围[0] 夹,并对于防止环绕的构件,映射到对象上的单个图像时非常有用。
GL_REPEAT 使被忽略的坐标的整数部分;OpenGL 使用仅小数部分,从而创建重复的方式。
只有换行设置为GL_CLAMP,被访问边境纹理的元素。
最初,GL_TEXTURE_WRAP_S 设置为GL_REPEAT。
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);将纹理坐标t 的换行参数设置为GL_CLAMP 或GL_REPEAT。
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);当像素的纹理映射到某个区域较少或等于一个纹理元素,使用纹理放大函数。
它将纹理放大函数设置为GL_NEAREST 或GL_LINEAR。
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);正在纹理的像素映射到大于一个纹理元素的区域时,就使用削减函数的纹理。
有六个已定义的minifying 函数。
其中的两个使用最近的一个或最近的四个纹理元素计算纹理值。
其他四个使用mipmap。
一个mipmap 是一组有序的阵列表示相同逐步较低分辨率的图像。
如果纹理有尺寸2 n x 2 米有是最大值(n,m) + 1 mipmap。
第一次mipmap 是原始的纹理尺寸2 n x 2 米。
每个后续mipmap 有尺寸 2 1 个 2 k l 1 2 x 2 k l 哪里的以前的mipmap 尺寸直到任一k = 0 或l = 0。
此时,随后mipmap 在维度1 个 2 l 1 或 2 k 1 x 1 之前,有维1 x 1 的最后mipmap。
使用glTexImage1D 或glTexImage2D 的指示,mipmap 顺序级别的详细信息参数定义mipmap。
级别0 是原始的纹理;级别大胆最大值(n,m) 是最后1 x 1 mipmapglTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, textureImg.imgWidth, textureImg.imgHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, textureImg.data);}指定二维纹理图像,参数依次是GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLint format, GLenum type, const GLvoid *pixels,目标目标纹理。
必须是GL_TEXTURE_2D。
级别级别的详细信息数量。
级别0 是基础映像级别。
级别n 是n 次mipmap 减少图像。
internalformat纹理中的颜色分量的数目。
必须是1、2、3,或4,或以下符号常量之一:GL_ALPHA GL_ALPHA4,GL_ALPHA8 GL_ALPHA12,GL_ALPHA16 GL_LUMINANCE,GL_LUMINANCE4 GL_LUMINANCE8,GL_LUMINANCE12 GL_LUMINANCE16,GL_LUMINANCE_ALPHA GL_LUMINANCE4_ALPHA4,GL_LUMINANCE6_ALPHA2 GL_LUMINANCE8_ALPHA8,GL_LUMINANCE12_ALPHA4 GL_LUMINANCE12_ALPHA12,GL_LUMINANCE16_ALPHA16 GL_INTENSITY,GL_INTENSITY4 GL_INTENSITY8,GL_INTENSITY12 GL_INTENSITY16,GL_R3_G3_B2 GL_RGB,GL_RGB4 GL_RGB5,GL_RGB8 GL_RGB10,GL_RGB12 GL_RGB16,GL_RGBA GL_RGBA2,GL_RGBA4 GL_RGB5_A1 GL_RGBA8,GL_RGB10_A2 GL_RGBA12,或GL_RGBA16。
宽度纹理图像的宽度。
必须是2 n + 2 (边框)的一些整数n。
高度纹理图像的高度。
必须是2 米+ 2 (边框)的一些整数米。
边框边框的宽度。
必须是0 或1。
格式此像素数据的格式。
它可以假定九个符号值中的一个,其中每个元素是一个RGB 三。
它是转换为浮点数,装配到RGBA 元素通过附加alpha 1.0 版。
每个组件然后乘以签名的比例因子GL_c_SCALE、添加到签名的偏见GL_c_BIAS,并夹紧系列类型此像素数据的数据类型。
接受以下符号值:GL_UNSIGNED_BYTE GL_BYTE,GL_BITMAP GL_UNSIGNED_SHORT,GL_SHORT GL_UNSIGNED_INT,GL_INT,和GL_FLOAT。
像素指向内存中的图像数据的指针。
#include <stdio.h>#include <stdlib.h>#include <memory.h>#include <string.h>#include "type.h"void LoadBmp(char *filename, TEXTUREIMAGE *textureImg){int i, j;FILE *file;BMPFILEHEADER bmpFile;BMPINFOHEADER bmpInfo;int pixel_size;// 初始化纹理数据textureImg->imgWidth = 0;textureImg->imgHeight = 0;if (textureImg->data != NULL){delete []textureImg->data;}// 打开文件file = fopen(filename, "rb");if (file == NULL){return;}// 获取文件头rewind(file);fread(&bmpFile, sizeof(BMPFILEHEADER), 1, file);fread(&bmpInfo, sizeof(BMPINFOHEADER), 1, file);// 验证文件类型if (bmpFile.bfType != 0x4D42){return;}// 获取图像色彩数pixel_size = bmpInfo.biBitCount >> 3;// 读取文件数据textureImg->data = new unsigned char[bmpInfo.biWidth * bmpInfo.biHeight * pixel_size];for(i = 0 ; i < bmpInfo.biHeight; i++){fseek(file, bmpFile.bfOffBits + (bmpInfo.biHeight - i - 1) * bmpInfo.biWidth * pixel_size, SEEK_SET);for (j = 0; j < bmpInfo.biWidth; j++){// 红色分量fread(textureImg->data + (i * bmpInfo.biWidth + j) * pixel_size + 2, sizeof(unsigned char), 1, file);// 绿色分量fread(textureImg->data + (i * bmpInfo.biWidth + j) * pixel_size + 1, sizeof(unsigned char), 1, file);// 蓝色分量fread(textureImg->data + (i * bmpInfo.biWidth + j) * pixel_size + 0, sizeof(unsigned char), 1, file);// Alpha分量if (pixel_size == 4){fread(textureImg->data + (i * bmpInfo.biWidth + j) * pixel_size + 3, sizeof(unsigned char), 1, file);}}}// 记录图像相关参数textureImg->imgWidth = bmpInfo.biWidth;textureImg->imgHeight = bmpInfo.biHeight;textureImg->byteCount = pixel_size;fclose(file);}#ifndef TYPE_H#define TYPE_H/*-------------类型定义--------------*/// 纹理图像结构typedef struct{int imgWidth; // 纹理宽度int imgHeight; // 纹理高度unsigned char byteCount; // 每个象素对应的字节数,3:24位图,4:带alpha 通道的24位图unsigned char *data; // 纹理数据}TEXTUREIMAGE;// BMP文件头#pragma pack(2)typedef struct {unsigned short bfType; // 文件类型unsigned long bfSize; // 文件大小unsigned short bfReserved1; // 保留位unsigned short bfReserved2; // 保留位unsigned long bfOffBits; // 数据偏移位置}BMPFILEHEADER;#pragma pack()// BMP信息头typedef struct {unsigned long biSize; // 此结构大小long biWidth; // 图像宽度long biHeight; // 图像高度unsigned short biPlanes; // 调色板数量unsigned short biBitCount; // 每个象素对应的位数,24:24位图,32:带alpha通道的24位图unsigned long biCompression; // 压缩unsigned long biSizeImage; // 图像大小long biXPelsPerMeter;// 横向分辨率long biYPelsPerMeter;// 纵向分辨率unsigned long biClrUsed; // 颜色使用数unsigned long biClrImportant; // 重要颜色数}BMPINFOHEADER;// 材质结构typedef struct{float ambient[4]; // 环境光反射float diffuse[4]; // 漫反射float specular[4]; // 镜面反射float shininess; // 镜面反射强度}MATERIAL;// 光照结构typedef struct{float lightAmbient[4]; // 环境光参数float lightDiffuse[4]; // 漫射光参数float lightSpecular[4]; // 镜面光参数float lightPosition[4]; // 光源位置}LIGHT;#endif。