解決C語言下enumerator重複宣告的問題

2021-10-07 10:45:21 字數 881 閱讀 6870

本人最近在buntu系統下用c編譯時,出現error:redeclaration of enumerator '***』這個報錯,表示重複宣告了乙個列舉enum。

如在led.h中宣告了乙個enum

#ifndef __led_h_

#define __led_h_

typedef

enum

led_color_t;

#endif

然後,在main.c中引用了這個標頭檔案#include 「led.h」

#include

"led.h"

#include

"relay.h"

但另乙個檔案relay.h中也引用了這個"led.h".

#ifndef __relay_h_

#define __relay_h_

#include

"led.h"

#endif

此時如果main.c中同時引用"led.h"和"relay.h"就會報這個錯.

解決方法是把main.c中引用led.h刪除,因為引用的relay.h中已經包含了"led.h"了,不需要再引用。

//#include "led.h"

#include

"relay.h"

小結:這裡我一開始認為已經做了標頭檔案免重複包含的#ifndef ***.h的說明,就可以隨便引用了,結果發現還是會報錯。這裡也強調了**規範的重要性,一定要仔細檢查**,看下有沒有重複包含的情況,重複包含的標頭檔案需要盡量刪除,為了**的可讀性和規範性也為了減少一些錯誤的產生,這是必要的。

C語言下的位運算

簡介 程式中的所有數在計算機記憶體中都是以二進位制的形式儲存的。位運算是直接對整數的二進位制位進行操作,簡便高效。下表列出了c語言的位運算子 名稱運算子 含義按位與 a b 僅1 1 1 按位或a b 僅0 0 0 按位異或 a b 對應數字上的數相同為0,不同為1 按位取反 a0和1全部取反 注意...

c語言下的檔案操作函式

這段時間整理c語言的檔案操作函式費了老大勁,太久沒接觸c語言,一開始寫起來很不順心,終於算是整理了一部分函式出來,可以告一段落了.但是還有一點bug,在對檔案進行寫入操作時,對於寫入資料的長度如果大於寫入字串本身長度的話,這時候該檔案的內容會多出一些莫名其妙的資料,希望遇到過此類問題的朋友告訴我原因...

C語言下的核心鍊錶

二.核心鍊錶 核心鍊錶是一種鍊錶,linux核心中的鍊錶都是用這種形式實現的 1.特性 核心鍊錶是一種雙向迴圈鍊錶,核心鍊錶的節點節點結構中只有指標域 使用核心鍊錶的時候,將核心鍊錶作為乙個成員放入到乙個結構體中使用 我們在鍊錶中找到核心鍊錶結構的位址,通過這個位址就可以找到外部大結構體的位址,通過...