国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
補(bǔ)習(xí)C語言之在.h文件中定義全局變量

      話說在一次整理code的時(shí)候,無意間將一個原本定義在.c文件中的全局變量移動到.h 文件中(此全局變量被多個.c文件使用),然后突然不能生成.ko(linux中可動態(tài)裝載的驅(qū)動模塊).怎么回事?難道是移動code的時(shí)候弄錯了?仔細(xì)一看提示信息,原來是 multiple definition.沒整理之前的code是將此全局變量定義在file***.c 中, 然后在其他的.c中使用的是extern 導(dǎo)入,當(dāng)時(shí)可以很順利的編成.ko.后來由于感覺code不美觀,在整理code的時(shí)候把它提到了file***.h中,讓使用到這個全局變量的.c都 include file***.h(貌似這樣做不是很好?暫時(shí)不管了).怎么就這么簡單移動了一下code,就會出現(xiàn)問題?(有段時(shí)間沒寫 C  code了,^_^...).

     于是乎,開始寫一個簡單的測試code來找原因. 下面的幾段估計(jì)全世界的會玩電腦的人都能看懂的code. 先貼上:

//file1.h

#ifndef __FILE1_H__
#define __FILE1_H__

int i;

#endif

//file2.h

#ifndef __FILE2_H__
#define __FILE2_H__

#include "file1.h"

extern void file2_change_i_value(void);

#endif

//file1.c

#include "file1.h"
#include "file2.h"

void main(void)
{
    printf("before i = %d\n", i);
    file2_change_i_value();
    printf("after i = %d\n", i);
}

//file2.c

#include "file2.h"

void file2_change_i_value(void)
{
     i = 10;
}

      我使用的是linux平臺,所以使用 gcc file1.c file2.c -o file  編譯生成可執(zhí)行文件file. 嗯??這次居然很順利的生成了file.趕緊執(zhí)行 ./file, console 打印出如下信息:

before i = 0
after i = 10

      回頭看看gcc 編譯過程中有沒有類似 multiple definition 的error 或 warning 信息,很遺憾,居然也沒有.難道是現(xiàn)在寫的這個小code沒有模擬出上面生成.ko文件的原始code. 一想,還確實(shí)有點(diǎn)不一樣的地方,于是乎,把上面的code修改為如下,只需要修改file1.h文件哦.

//file1.h

#ifndef __FILE1_H__
#define __FILE1_H__

int i = 0;

#endif


      然后執(zhí)行 gcc file1.c file2.c -o file , 哈哈,這次就出現(xiàn) multiple definition of `i' 的提示了.

     現(xiàn)在我們來比較一下2次 file1.h 的區(qū)別, 很顯然, 第一次沒有對 i 賦初值, 而第二次 賦初值為 0. 嗯? 好像int全局變量初始值都是0吧,想想,學(xué)習(xí)C語言到現(xiàn)在都第8個年頭,書本的知識早也忘記得差不多了.言歸正傳,那既然全局變量 i 2次的的值都是一樣的,為什么會出現(xiàn)這樣的提示呢?哦,對了,好像有一次, 也是在一個.c文件中定義了一個全局變量并賦初值,然后直接把定義語句copy到了其他使用它的其他.c文件中,在前面加了一個 extern, 編譯也是 failed. 這2 中現(xiàn)象是不是很相似??

      看看C語言課本,自己的理解是,貌似在定義的時(shí)候可以賦初值,聲明的時(shí)候不用賦值,只需要extern一下就OK.至于在.h中定義全局變量,大致也是說,這樣做的話,多個.c文件在 include .h以后,會當(dāng)作又重新定義變量,然后全局變量的命名污染了,就提示 multiple definition 了. 我個人覺得是這樣,如有不夠完整或有異義的地方大家可以留言指點(diǎn).....

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
static變量和static函數(shù)的用法摘抄_小米的心境
C/C++ 中 static 的用法全局變量與局部變量 | 菜鳥教程
結(jié)合extern談?wù)勵^文件的作用
static 全局變量放在頭文件中
淺談C/C 中的static和extern關(guān)鍵字
KEIL最簡程序閱讀
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服