看很多微控制器的標頭檔案裡寫著extern c ,這是什麼意思?另外,51微控制器可不可以用C編寫程式

時間 2021-09-06 09:20:34

1樓:

我們的c語言有個進化版,叫c++,這個想必樓主知道,keil mdk是支援c++程式設計的,也就是說,你可以用c語言或者c++寫你的程式,都可以。

但是,有一個問題,就是標頭檔案的問題,c語言寫的標頭檔案c++是不認識的,需要轉換一下,這個轉換的方法就是加上extern "c"

#ifdef __cplusplus

extern "c" {

}這句話意思是,如果你定義了“__cplusplus”這個巨集,說明你的意圖是想在c++檔案中呼叫這個標頭檔案,我前頭說了,c語言的標頭檔案c++是不認識的,怎麼辦呢,就加上

extern "c" {。。。。。}

告訴c++檔案,大括號裡面的東西是用c語言寫的,然後c++檔案就認識了,就能呼叫這個標頭檔案裡的東西了,

extern "c" {

}的存在,使得c語言和c++能更好的結合的一塊。

另外,樓主的問題是錯誤的,不管什麼微控制器,他們只識別二進位制語言,至於你的高階語言用什麼編寫,那要看你的編譯或者編輯環境支援與否,比如arm,可以扶持c,c++,而c51編譯器並不支援c++,所以c51編譯器只能把c語言翻譯成最終的二進位制語言,不能翻譯c++

2樓:幻竹軒

extern 是用來宣告全域性變數的,在多個檔案中呼叫變數必須用 extern

3樓:匿名使用者

extern "c" 是用來相容c++的

51微控制器不可以用c++編寫程式

51微控制器怎麼把多個子程式做成標頭檔案,然後呼叫

4樓:

標準的做法:

timer.c 裡面包含了函式宣告,全域性變數,函式體,timer.h 裡面使用#ifndef 語句,並且將外部需要使用的變數或函式加extern;

例:timer.c:

#include "timer.h"

int timercnt;

int timerstatu;

void timerstart();

void timerstop();

void timerinit();

void timerstart()

{}void timerstop()

{}void timerinit()

timer.h:

#ifndef __timer_h_

#define __timer_h_

//如果外部需要使用這些變數或函式,直接包含標頭檔案即可。

//如果不對外開放的函式,就不需要新增

//注:在c原始檔中,函式宣告要補全

extern int timercnt;

extern int timerstatu;

extern void timerstart();

extern void timerstop();

extern void timerinit();

#endif

5樓:壕銘爽

你可以寫一個標頭檔案,比如說之類的,開始寫51程式的時候,#include 就可以放進去了,這條語句相當於這個檔案。你可以把它放在任意的路徑,最好是和一個資料夾,方便直接用,就不用每次使用都要查詢它的路徑了。希望能夠幫到你

6樓:

多個子程式寫到一個原始檔中啊,弄個main.c原始檔呼叫標頭檔案跑下就好了啊

7樓:匿名使用者

樓主解決問題了嗎?同問

51微控制器c語言程式設計標頭檔案的問題

矮子根 不知你是怎麼弄的,我照你的樣式重複了一遍也沒有報錯,請照下圖認真檢查 另外注意 你在兩個檔案裡定義的beep 和 beep 是不一樣的,這才是錯誤的原因。 這個告警是告訴你沒有實現函式吧。你應該把這個函式的主體在.c裡實現。 微控制器的戰鬥機 你看看定義的函式名一樣嗎? 對於c語言的標頭檔案...

51微控制器怎麼把多個子程式做成標頭檔案,然後呼叫

標準的做法 timer.c 裡面包含了函式宣告,全域性變數,函式體,timer.h 裡面使用 ifndef 語句,並且將外部需要使用的變數或函式加extern 例 timer.c include timer.h int timercnt int timerstatu void timerstart ...

pic微控制器燒寫的問題不會,原因如下,,求高手指點!!謝謝

愈昆傑 先看看你的器件選擇有沒有問題,或者是你沒有給微控制器供電下面是icd2使用說明裡的解釋 icdwarn0020 invalid target device id 出現這項提示時,是icd2主機與目標晶片之間通訊不正常,可檢查 1 目標板上的晶片是否正確,電源 power 設定是否正確。2 晶...