今天組長臨下班前給了個新任務,讓我去消除程式碼測評中的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每日收穫之變數賦初值
相關文章
- 2024.04.19每日收穫之連結串列與邏輯操作
- struts 中多個html:text賦初值問題HTML
- php之普通變數賦值、物件賦值、引用賦值的區別PHP變數賦值物件
- 2024.04.18每日收穫之聯合體結構體記憶體分配結構體記憶體
- ES6之變數的解構賦值變數賦值
- into賦予多個變數變數
- ES6入門之變數的解構賦值變數賦值
- 變數的賦值 指標間接賦值變數賦值指標
- 變數的解構賦值變數賦值
- shell 變數賦值問題變數賦值
- shell變數命名與賦值變數賦值
- php變數賦值給jsPHP變數賦值JS
- python 多變數賦值Python變數賦值
- javascript變數賦值或者重新賦值注意事項JavaScript變數賦值
- PLSQL Language Reference-PL/SQL語言基礎-變數賦值-對BOOLEAN變數賦值SQL變數賦值Boolean
- 物件屬性值賦給變數物件變數
- 把物件賦給int型變數物件變數
- 給物件引用變數賦值(轉)物件變數賦值
- MySQL中變數的定義和變數的賦值使用MySql變數賦值
- ES6標準入門之變數的解構賦值變數賦值
- 把匿名函式賦值給變數,通過變數來呼叫函式賦值變數
- 把匿名函式賦值給變數,透過變數來呼叫函式賦值變數
- vue 變數賦值同時改變的問題Vue變數賦值
- c#小灶——常量、變數和賦值C#變數賦值
- AC-DMIS 5.3 V變數賦值變數賦值
- shell中變數的取值與賦值變數賦值
- 再說mysql中的變數賦值MySql變數賦值
- 1.2程式設計基礎之變數定義、賦值及轉換程式設計變數賦值
- Erlang那些事兒第1回之我是變數,一次賦值永不改變變數賦值
- 2024.4.15
- JS中的變數賦值深入理解JS變數賦值
- 列表切片賦值給另一個變數賦值變數
- go語言變數的宣告與賦值Go變數賦值
- 自己對Java中if變數賦值的理解Java變數賦值
- ES6:變數的解構賦值變數賦值
- ES6:變數的結構賦值變數賦值
- ES6 變數的解構賦值變數賦值
- ECMAScript6變數的解構賦值變數賦值