第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Extern關鍵字對C函數(shù)的影響

Extern關鍵字對C函數(shù)的影響

C
慕妹3242003 2019-07-27 15:15:01
Extern關鍵字對C函數(shù)的影響在C中,我沒有注意到extern函數(shù)聲明之前使用的關鍵字。起初,我認為當定義extern int f();在一個文件中力在文件的作用域之外實現(xiàn)它。但是我發(fā)現(xiàn)兩者都是:extern int f();int f() {return 0;}和extern int f() {return 0;}編譯得很好,沒有GCC的警告。我用gcc -Wall -ansi它甚至不會接受//評論。是否有使用的效果?extern 函數(shù)定義之前?或者它只是一個可選的關鍵字,對函數(shù)沒有副作用。在后一種情況下,我不明白為什么標準設計人員選擇用多余的關鍵字亂扔語法。編輯:為了澄清,我知道extern在變量中,但我只是問extern在……里面功能.
查看完整描述

3 回答

?
搖曳的薔薇

TA貢獻1793條經(jīng)驗 獲得超6個贊

我們有兩個文件,foo.c和bar.c。

這是foo.c

#include <stdio.h>volatile unsigned int stop_now = 0;extern void bar_function(void);int main(void){
  while (1) {
     bar_function();
     stop_now = 1;
  }
  return 0;}

現(xiàn)在,這里是bar.c

#include <stdio.h>extern volatile unsigned int stop_now;void bar_function(void){
   while (! stop_now) {
      printf("Hello, world!\n");
      sleep(30);
   }}

正如您所看到的,我們在foo.c和bar.c之間沒有共享的頭,但是bar.c在鏈接時需要在foo.c中聲明一些東西,而foo.c在鏈接時需要來自bar.c的函數(shù)。

通過使用“extern”,您是在告訴編譯器,在鏈接時將找到任何跟隨它的東西(非靜態(tài)的);不要在當前傳遞中為它保留任何東西,因為以后會遇到它。在這方面,函數(shù)和變量受到平等對待。

如果您需要在模塊之間共享一些全局的,并且不想將它放在/初始化一個頭中,那么它是非常有用的。

從技術上講,庫公共頭中的每個函數(shù)都是“extern”,但是根據(jù)編譯器的不同,將它們標記為“extern”幾乎沒有什么好處。大多數(shù)編譯器可以自己解決這個問題。正如您所看到的,這些函數(shù)實際上是在其他地方定義的。

在上面的示例中,main()只打印Hello World一次,但是繼續(xù)輸入bar_function()。還請注意,在這個示例中,bar_function()不會返回(因為它只是一個簡單的示例)。想象一下,當信號被服務(因此是易失性的)時,STOP_NOW被修改,如果這看起來不夠實用的話。

Externs對于諸如信號處理程序、不想放入頭或結構等的互斥對象非常有用。大多數(shù)編譯器將進行優(yōu)化,以確保它們不為外部對象保留任何內(nèi)存,因為它們知道它們將在定義對象的模塊中保留它。然而,在構建公共函數(shù)的原型時,用現(xiàn)代編譯器來指定它也沒有什么意義。

希望有幫助:)



查看完整回答
反對 回復 2019-07-28
?
慕少森

TA貢獻2019條經(jīng)驗 獲得超9個贊


就我記憶中的標準而言,默認情況下所有函數(shù)聲明都被視為“extern”,因此不需要顯式地指定它。

這并不使這個關鍵字無用,因為它也可以與變量一起使用(在這種情況下-它是解決鏈接問題的唯一解決方案)。但是功能-是的,這是可選的。


查看完整回答
反對 回復 2019-07-28
  • 3 回答
  • 0 關注
  • 686 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號