c語言extern作用域,函數內定義extern變量是怎么回事?

該樓層疑似違規已被系統折疊?隱藏此樓查看此樓

http://ca21days.blog.163.com/blog/static/4383729420096102223744/

變量的聲明(declarations)會將變量的類型和名稱傳達給程序。當然,定義

(definitions)也是一種聲明:當我們定義一個變量的時候,我們當然也聲明了他的名稱和類型。我們可以通過使用“extern”關鍵字來聲明

(declarations)一個變量,而不用定義(definitions)它。聲明(declarations)的形式就是在對象(變量)的名字和類

型前面,加上關鍵字“extern”:

extern int i; // declares but does not define i

int i; // declares and defines i

An extern declaration is not a definition

and does not allocate storage. In effect, it claims that a definition of

the variable exists elsewhere in the program. A variable can be

declared multiple times in a program, but it must be defined only once.

帶“extern”關鍵字的語句屬于聲明(declarations),不是定義

(definitions),他不會給變量分配內存。實際上,它是說明程序中的某處包含這個變量的定義。一個變量可以在程序中被聲明

(declarations)多次,但是只能被定義(definitions)一次。

A declaration may have an initializer only if it is also a definition because only

a definition allocates storage. The initializer must have storage to

initialize. If an initializer is present, the declaration is treated as a

definition even if the declaration is labeled extern:

聲明(declarations)時你可以給變量初始化。但是一旦你這樣做,那么這句話也就變

成了定義(definitions),因為只有在定義(definitions)的時候才會為變量分配內存。初始化的時候必然要為初始值分配存儲空間。如

果你在聲明(declarations)的時候同時初始化了變量,即便“extern”關鍵字存在,這個語句也會認為是定義(definitions)。

extern double pi = 3.1416; // definition

Despite the use of extern, this statement

defines pi. Storage is allocated and initialized. An extern declaration

may include an initializer only if it appears outside a function.

不管有沒有“extern”關鍵字存在,這條語句的作用也是定義(definitions)“pi”。變量已經被分配了內存,并且賦予了初始值。聲明(declarations)只有在一種情況下可以被初始化,那就是當他被放置在函數外部的時候。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/385799.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/385799.shtml
英文地址,請注明出處:http://en.pswp.cn/news/385799.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java高級進階學習資料!java開發環境的搭建是什么意思

1. static 和 final 的用法 static 的作用從三個方面來談,分別是靜態變量、靜態方法、靜態類。 靜態變量:聲明為 static 的靜態變量實質上就是全局變量,當聲明一個對象時,并不產生static 變量的拷貝,而是該類所有實例…

交大c語言第一次作業答案,第一次作業答案(供參考)

以下為《第一次作業答案(供參考)》的無排版文字預覽,完整格式請下載下載前請仔細閱讀文字預覽以及下方圖片預覽。圖片預覽是什么樣的,下載的文檔就是什么樣的。計算最優投資組合:無風險的短期國債貨幣基金期望收益率為:8%股票基金…

Java高級面試題!java小游戲制作視頻

首先我們先來看看這份Spring源碼分析筆記 Spring源碼分類的一覽無余,詳細清晰明了!讓你分分鐘把握! Spring源碼分析筆記手冊內容,共七個部分 第一部分Spring概述 Spring 簡介Spring 發展歷程Spring 的優勢Spring 的核?結構Sprin…

c語言 字符轉int型,C語言—類型之間的轉換

原標題:C語言—類型之間的轉換當混合不同類型的數據進行計算時,便會發生類型轉換。當不同類型的數據進行計算時,應首先將操作數轉換成相同的數據類型,然后再進行計算。類型轉換有兩種形式,即隱式類型轉換和顯示類型轉換…

Java高級面試題!java構造方法的作用和特點

1. Redis面試專題 絕大部分寫業務的程序員,在實際開發中使用 Redis 的時候,只會 Set Value 和 Get Value 兩個操作,對 Redis 整體缺乏一個認知。這里以面試題的形式對 Redis 常見問題做一個總結,解決大家的知識盲點。 什么是Red…

c語言程序改頻率,求問。這個fft c語言程序 采樣的聲音頻率為多少?

timernum,timernum2,LEDnum3,Ltime;//用于分離/*加入數組用于顯示相應led燈數目*/uchar lednum[]{0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};//0-7的顯示數組 P2組控制int xdata FftReal[SAMPLE_NUM];int xdata FftImage[SAMPLE_NUM];sbit p30P3^0;sbit p31P3^1;sbit p3…

Java高級面試題!java編程思想怎么學

專題5:Java序列化 1、什么是java序列化,如何實現java序列化? 2、保存(持久化)對象及其狀態到內存或者磁盤 3、序列化對象以字節數組保持-靜態成員不保存 4、序列化用戶遠程對象傳輸 5、Serializable 實現序列化 6、writeObject 和 readO…

計算星期c語言編碼,[轉載]計算任何一天是星期幾的C語言源代碼.

[轉載]計算任何一天是星期幾的C語言源代碼.#include int main(){int day,mn,yr,i,days0,s,k;int mont[13]{0,31,28,31,30,31,30,31,31,30,31,30,31};char wek[][9]{ {S,u,n,d,a,y},{M,o,n,d,a,y},{T,u,e,s,d,a,y},{W,e,d,n,s,d,a,y},{T,h,u,r,s,d,a,y},{F,r,i,d,a,y},{S,a,t,u,…

Java高級:mysqllimit兩個參數

零基礎如何學習Java? 首先,你要明白一點,Java入門不難! 無論你是從事哪個行業,興趣一定是最好的老師,也是你學習的動力。 學習方式1:自學 自學模式其實我個人不建議絕大部分的人選擇&#x…

db2 c語言游標名稱可以是變量,mysql?c語言?游標能取多行嗎

滿意答案xuyingcxm2015.02.03采納率:45% 等級:12已幫助:7182人1、 無返回結果語句,如:INSERT,UPDATE,DROP, DELETE等2、 select語句返回單行變量并可傳給本地變量(select ..into)3、 返回多行結果集的select語句,并…

從入門到精通!javaidea安裝教程

一、秒殺系統架構設計都有哪些關鍵點? 二、設計秒殺系統時應該注意的5個架構原則 架構原則:“4要1不要” 1.1.數據要盡里少 1.2. 請求數要盡里少 1.3.路徑要盡里短 1.4.依賴要盡里少 1.5. 不要有單點2不同場景下的不同架構案例 三、如何才能做好動靜分離&#xff1…

-wl是不是c語言的標識符,C語言基礎知識考試

第一章 C語言基礎知識一、選擇題1.C語言規定,必須用 作為主函數名。(0級) A)Function B)include C)main D)stdio2.一個C程序可以包含任意多個不同名的函數,但有且僅有一個 ,一個C程序總是從 開始執行。(0級) A)過程 B)…

從入門到精通!java可視化編程軟件哪個好

1、我往Redis里寫的數據怎么沒了? 使用Redis的同學你要明白一點,你為什么用Redis?用redis的作用是什么?用redis的好處是什么?凡事多思考一下為什么,多想想背后的原因。 就在不久前有朋友跟我說過&#xf…

學生檔案c語言編程,學生檔案管理問題

/* 一個修改版本 */#include struct student{int num;char name[10];char sex;char address[20];};struct student stu[3] {{000, "li lin", m, "103 beijing road"},{001, "zhang fun", m, "130 shanghai road"},{002, "wang …

從思維圖到基礎再到深入,java空間查詢

螞蟻金服一面: 先自我介紹,講講自己基礎掌握情況,以及項目經歷平時會用到哪些數據結構?鏈表和數組的優缺點?解決hash沖突的方法有哪些?講講自己對HashMap的理解,以及和Weakhashmap的區別&#…

c語言中如何取消最后一個空格,新人提問:如何將輸出時每行最后一個空格刪除...

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓如何將每行最后一個空格刪除&#xff0c;使矩陣只有數字間有空格&#xff0c;沒有多余空格&#xff1f;#include#includeint main(){int i,j,k,m,n,x,h,y;int a[15][15]{0};while(scanf("%d",&i)){k1;for(n1;n<i;…

從零開始學Java編程!java集合類詳解和使用

目錄 一、冒泡排序 二、選擇排序 三、插入排序 四、快速排序 五、歸并排序 六、希爾排序 七、堆排序 八、基數排序&#xff08;桶排序&#xff09; 九、遞歸 十、鏈表 十一、棧 十二、隊列 十三、二叉樹 最后 由于篇幅有限&#xff0c;這里就不一一羅列了&#xff0c;20道常見…

go語言調用c 的頭文件 so,Golang生成共享庫(shared library)以及Golang生成C可調用的動態庫.so和靜態庫.a...

Golang類似于C的靜態語言&#xff0c;效率也接近于C&#xff0c;如果Golang也可以導出可供C調用的庫&#xff0c;那可以和很多高級語言say goodbye了&#xff0c;goodbye似乎又有點武斷&#xff0c;但至少說&#xff0c;Golang可以做很多事&#xff0c;而且效率優于很多高級語言…

從青銅到王者的路線,java不同系統間數據同步

深耕技術&#xff0c;啃下22個技術點 互聯網行業更新換代非常快&#xff0c;行業常態便是不斷學習&#xff0c;因此這些主流技術你一個都不能落下&#xff01; ①并發編程 Java并發編程是整個Java開發體系中最難以理解&#xff0c;但也是最重要的知識點之一&#xff0c;因此學習…

c語言 大雨 班上多個同學準備,2015年計算機二級考試《C語言》提高練習題(7)

1[單選題] 若有C語言表達式23*47/3&#xff0c;以下選項中敘述正確的執行順序是A.先執行3*4得12&#xff0c;再執行212得14&#xff0c;再執行7/3得2&#xff0c;最后執行142得16B.先執行3*4得12&#xff0c;再執行7/3得2.5&#xff0c;最后執行2122.5得16.5C.先執行7/3得2&…