今天組長臨下班前給了個新任務,讓我去消除程式碼測評中的5D警告,5D指的是Procedure contain UR data flow anomalies,翻譯過來就是存在UR(變數未賦初值就使用)資料流異常。這個警告其實是測評網址的問題,未賦初值,但是在微控制器清ram時,已經對存放在ram中所有的全域性變數清零了,只是沒有在程式碼中寫出來,就報了這個警告。
因此我只需要把所有用到的全域性變數在main函式開頭進行清零即可,遇到了之前寫過的問題,定義與宣告之間重定義問題(定義並賦初值只能一次,宣告可以多次且不能賦初值),我們之前把常量全放在一個.h檔案裡,定義並宣告為全域性變數,對extern進行宏定義,只在main函式中定義,其它呼叫該標頭檔案只進行宣告。如下所示
main.c
#include<demo.h>
#define MAIN_C
Ramextern unsigned char flag=0;
//這裡等價於unsigned char flag=0;定義並賦初值0
demo.h
#ifdef MAIN_C
#define Ramextern
#else
#define Ramextern extern
Ramextern unsigned char flag;
//這裡等價於extern unsigned char flag;
demo.c
#include<demo.h>
Ramextern unsigned char **flag=0**;
//這裡會報錯,宣告不能賦值
今天還學到了如何對聯合(union)型別的資料進行賦初值,不能直接等於0,需要加大括號{0};同時上網查閱資料瞭解到聯合體和結構提的區別,聯合體變數共用記憶體,更省空間;而結構體變數為獨立記憶體
如:
union name
{
unsigned char a
unsigned int b
}name1
這裡定義了一個聯合體型別的資料name1,如果我對name1進行賦初值時,需要這樣做,name1={0}
;此時的a=0,b=0(共用儲存空間);首先對聯合體資料的第一個變數賦初值;
typedef union
{
unsigned char a
unsigned int b
}name
name name1;
//與上面的union等價
typedef是為現有的型別起一個別名,使使用起來更加的方便,注意一點,它並沒有產生新的型別。
如
typedef int Beet
Beet a;
//等價於int a;
2024.4.15每日收穫之變數賦初值
相關文章
- 11.21日每日收穫
- 11.18日每日收穫
- 2024.04.19每日收穫之連結串列與邏輯操作
- 2024.04.18每日收穫之聯合體結構體記憶體分配結構體記憶體
- php之普通變數賦值、物件賦值、引用賦值的區別PHP變數賦值物件
- ES6之變數的解構賦值變數賦值
- 2024.4.15
- ES6入門之變數的解構賦值變數賦值
- 變數的賦值 指標間接賦值變數賦值指標
- 變數的解構賦值變數賦值
- shell 變數賦值問題變數賦值
- shell變數命名與賦值變數賦值
- 物件屬性值賦給變數物件變數
- MySQL中變數的定義和變數的賦值使用MySql變數賦值
- ES6標準入門之變數的解構賦值變數賦值
- vue 變數賦值同時改變的問題Vue變數賦值
- Erlang那些事兒第1回之我是變數,一次賦值永不改變變數賦值
- 1.2程式設計基礎之變數定義、賦值及轉換程式設計變數賦值
- c#小灶——常量、變數和賦值C#變數賦值
- AC-DMIS 5.3 V變數賦值變數賦值
- JAVA之反射學習3-反射獲取成員變數並賦值Java反射變數賦值
- MySQL 之變數MySql變數
- 2024.4.15學習記錄
- 列表切片賦值給另一個變數賦值變數
- JS中的變數賦值深入理解JS變數賦值
- 自己對Java中if變數賦值的理解Java變數賦值
- go語言變數的宣告與賦值Go變數賦值
- ES6:變數的結構賦值變數賦值
- 華納雲:linux怎麼將一個變數賦給另一個變數Linux變數
- 淺談Python變數賦值的三種方法!Python變數賦值
- ECMAScript 6入門 - 變數的解構賦值變數賦值
- matlab中怎麼給符號變數賦值Matlab符號變數賦值
- ES6 - 變數的解構賦值解析變數賦值
- JavaScript 同時宣告多個變數並賦值JavaScript變數賦值
- Linux之shell變數Linux變數
- C#之變數C#變數
- JavaScript之變數物件JavaScript變數物件
- 晨報 |「2024.4.15」星期一