簡體   English   中英

為什么第二條語句創建分配給非左值''main.c?

[英]why does the 2nd statement creates Assigning to non-lvalue '' main.c?

嗨,下面給出的這些陳述有什么區別?

 #define RES_WRITE 0Xf0f0
 #define DATA (0x0000 |= (1<<15))
 #define DATA (RES_WRITE |= (1<<15))

當 DATA 被分配給一個 int 變量時,它會顯示一個錯誤,例如“分配給非左值。我可以知道這個錯誤背后的原因以及如何解決這個錯誤我在做什么錯誤?

x |= yx = x | y的簡寫。 x = x | y ,所以你最終得到

0 = 0 | (1 << 15)

在此表達式中,您嘗試將某些內容分配給文字,這是不可能的。 還有| 是多余的,因為0 | x 0 | x總是只是x

從您的評論“我想屏蔽不同的位,然后將所有位分配給一個變量” ,您似乎想要簡單的常量來屏蔽單個位:

#define DATA (1 << 15)

這是一個只有 1 位設置的整數,可以用作掩碼。 由於各種原因,您應該更喜歡現代 C++ 中的constexpr而不是宏:

constexpr unsigned DATA = 1 << 15;

你可以像你提到的那樣使用兩者

auto x = DATA | 0x00f0 | 0x0100;

我認為您想將 0b1000000000000000 發送到微控制器的端口或全局發送到緩沖區。 將 |= 更改為 |

為什么你遇到錯誤?

考慮您的一個宏:

#define DATA (0x0000 |= (1<<15))

在這個宏中,你嘗試這樣做:

0x0000 = 0x0000 | (1<<15))

是否可以在0x0000上寫入數據? 0x0000是值; 這意味着它在 memory 上沒有任何位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM