当前位置:网站首页>项目总结1(头文件,switch,&&,位变量)
项目总结1(头文件,switch,&&,位变量)
2022-06-23 03:51:00 【苍茫也初心】
最近做了个小项目,按键+数码管显示+SPI通信,对于参数设置和通信颇多感触,这两个看似简单,做起来一点都不简单,要是做的可靠全面更是不简单,不管是工作量和对c的要求一点都不比控制的核心少和浅。现把做项目的过程中遇到的几个问题摘出来,做个总结,也方便以后看。
1,永远不要把外部函数和变量的声明放到.c文件中,而是要:
c源文件要包涵自己的头文件,目的就是让编译器检查定义和声明的一致性,如下
a.c
#include <a.h>
int sum(int a,int b)
{
……
}a.h
int sum(int a,int b);这样在a.c中包含自己的头文件a.h,在a.c中的函数sum修改时,编译器在编译时就会检查函数的定义和声明是否一致性。在其他比如b.c源文件中,如果要用到a.c中的sum函数时,在b.c的源文件中包涵a.h即可。
2,最好不要在头文件中定义变量
定义变量和声明变量的区别在于定义会产生内存分配,是汇编阶段的概念;而声明则只是告诉包含该声明的模块在链接阶段从其他模块寻找外部函数和变量。
全局变量如果在头文件中定义,如下:
#ifndef _XXXX_H
#define _XXXX_H
int A;
……
#endif那么,如果这个头文件被引用的话,变量A会被重复定义,显然语法上就错了。只不过有了这个#ifndef的条件编译,所以能保证你的头文件只被引用一次,在编译时会通过。不过若多个c文件包含这个头文件时,还是会出错,因为宏明的有效范围仅限于本c源文件,所以在多个c文件编译时是不会出错的,但在链接时就是报错,多出定义了同一个变量。
3,关于switch语句中变量的定义
switch(i)
{
case 1:
static char s_u8AA; //错,编译不通过
//………
}应该把变量定义`static char s_u8AA`放在switch前面。之所以在switch中最好不要定义变量,是因为这样可以避免出现下面的情况:
case 1:
int x;
case 2:
x = 0;4,位变量必须是全局变量或static变量。
a.可以放在源文件的开始bit g_bFlag;
b.也可以放在源文件的中间,比如函数中,但是static类型,比如static bit s_bFlag
c.但不允许在函数内部这样定义bit b_Flag,这违反了位变量必须是全局变量或static变量的原则。
5,条件与&&中,最好不要有函数,特别是需要执行到条件与&& 每次都要运行的函数,比如与程序的时钟滴答TickTime 有关的函数。
u8FlagDisPosFlash = u8FlagDisPosFlash && LedStateChange();其中,LedStateChange()与TickTimer有关,程序运行与预期不符。推测是,编译器在编译时,当u8FlagDisPosFlash = 0 时不执行LedStateChange(),导致运行效果和预期不符。修改如下:
char aa = 0;
aa = LedStateChange();
u8FalgDisPosFlash = u8FlagDisPOsFlash && aa;这样修改,达到预期效果!
总结,永远不要把外部函数和变量的声明放到.c源文件中,不要在头文件中定义变量,头文件只放声明即可。swithc语句中不要定义变量,而要在其前面定义;bit位变量必须是全局变量或static变量;条件与&&
中最好不要出现函数,因为可能不被执行。
边栏推荐
- PTA: Simulation Implementation of 7-86 set (function template)
- composer按装laravel
- What is the open source database under Linux
- Analysis on the current situation of the Internet of things in 2022
- Abnova ABCB10(人)重组蛋白说明书
- Notes on writing questions in C language -- free falling ball
- C语言刷题随记 —— 自由落体的球
- Pta:7-61 teacher student information management
- X24cxx series EEPROM chip C language universal reading and writing program
- Kali 安装之腾讯云经验遇到坑
猜你喜欢

How to make the page number start from the specified page in word

如何解决独立站多渠道客户沟通难题?这款跨境电商插件一定要知道!

Photoshop PS viewing pixel coordinates, pixel colors, pixel HSB colors

Flutter series: wrap in flutter

volatile 与线程的那些事

Leetcode 1208. Try to make the strings equal as much as possible (finally solved, good night)

智能语音时代到来,谁在定义新时代AI?

Online text filter less than specified length tool

C语言刷题随记 —— 自由落体的球

使用Live Chat促进业务销售的惊人技巧
随机推荐
Tiktok x-bogus and_ Signature parameter analysis
It supports running in kubernetes, adds multiple connectors, and seatunnel version 2.1.2 is officially released!
独立站聊天机器人有哪些类型?如何快速创建属于自己的免费聊天机器人?只需3秒钟就能搞定!
语料库数据处理个案实例(词性赋码、词性还原)
Svg+js smart home monitoring grid layout
const理解之一
PTA:7-58 图书音像出租管理
Kail 渗透基本素养 基础命令
zk 有一个节点报 It is probably not running且日志无明显报错
notepad++ 查找替换之分组替换保留
Introduction to deep learning
How to make the page number start from the specified page in word
2022金属非金属矿山(露天矿山)安全管理人员考试题模拟考试题库及答案
Background ribbon animation plug-in ribbon js
Volatile and threads
JVM调优简要思想及简单案例-为什么需要JVM调优?
TS advanced infer
32 single chip microcomputer has more than one variable Used in C
Pta:7-67 friend is very simple 2016final
PTA:6-30 时间相加