日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
同事用#include"xxx.c"把我給驚呆了??!

1、聊一聊

今天分享的是一個(gè)比較生僻的C語言知識(shí)點(diǎn),大家平時(shí)都用過#include"xxx.h"應(yīng)該很少或者幾乎沒有見過.c文件作為頭文件吧,那么今天bug菌就跟大家一起來學(xué)習(xí)一下。

2、操作一波

咱們先體驗(yàn)一波#include"xxx.c"文件能不能用:

01 體驗(yàn)一下 

參考demo:

 
 
 
 
  1. //FileName :main  
  2.  #include  
  3.  #include  
  4.   
  5.  /*************************** 
  6.   * .c文件聲明區(qū)域  
  7.   **************************/ 
  8.  #include"module1.c" 
  9.  #include"module2.c" 
  10.  
  11. /*************************** 
  12.  * Fuction: main 
  13.  * Author :(公眾號(hào):最后一個(gè)bug)  
  14.  **************************/ 
  15. int main(int argc, char *argv[]) { 
  16.  
  17.     Fuction1();  
  18.     Fuction2();  
  19.     printf("歡迎關(guān)注公眾號(hào):最后一個(gè)bug\n"); 
  20.     return 0; 

 
 
 
 
  1. //FileName: Module1.c  
  2. #include 
  3. /*************************** 
  4.  * Fuction: Fuction1 
  5.  * Author :(公眾號(hào):最后一個(gè)bug)  
  6.  **************************/ 
  7. void Fuction1() 
  8.     printf("Run Fuction1\n"); 
  9. }  

 
 
 
 
  1. //FileName: Module2.c  
  2.  #include 
  3.  /*************************** 
  4.   * Fuction: Fuction2 
  5.   * Author :(公眾號(hào):最后一個(gè)bug)  
  6.   **************************/ 
  7.  void Fuction2() 
  8.  { 
  9.      printf("Run Fuction2\n"); 
  10. }  

輸出結(jié)果:

分析一下:

看來這波操作可行,似乎還省去了.h文件,之前bug菌說過,分析.h文件的時(shí)候直接把.h文件在對(duì)應(yīng)的.c文件中的位置處展開然后進(jìn)一步分析即可,其實(shí)這.c文件也是如此,接著往下看。

02 加深理解 

參考demo:

 
 
 
 
  1. //FileName :main  
  2.  #include  
  3.  #include  
  4.   
  5.  char * cBug1 = "bugNo1";  //這里是位置1  
  6.  char * cBug2 = "bugNo2"; 
  7.  /*************************** 
  8.   * .c文件聲明區(qū)域  
  9.   **************************/ 
  10. #include"module1.c" 
  11. #include"module2.c" 
  12.  
  13. //char * cBug1 = "bugNo1";//這里是位置2  
  14. //char * cBug2 = "bugNo2"; 
  15.  
  16. /*************************** 
  17.  * Fuction: main 
  18.  * Author :(公眾號(hào):最后一個(gè)bug)  
  19.  **************************/ 
  20. int main(int argc, char *argv[]) { 
  21.  
  22.     Fuction1();  
  23.     Fuction2();  
  24.     printf("歡迎關(guān)注公眾號(hào):最后一個(gè)bug\n"); 
  25.     return 0; 

 
 
 
 
  1. //FileName: Module2.c  
  2.  #include 
  3.  /*************************** 
  4.   * Fuction: Fuction1 
  5.   * Author :(公眾號(hào):最后一個(gè)bug)  
  6.   **************************/ 
  7.  void Fuction1() 
  8.  { 
  9.      printf("Run Fuction1\n"); 
  10.     printf("%s\n",cBug1); 
  11. }  

 
 
 
 
  1. //FileName: Module2.c  
  2.  #include 
  3.  /*************************** 
  4.   * Fuction: Fuction2 
  5.   * Author :(公眾號(hào):最后一個(gè)bug)  
  6.   **************************/ 
  7.  void Fuction2() 
  8.  { 
  9.      printf("Run Fuction2\n"); 
  10.     printf("%s\n",cBug2); 
  11. }  

輸出結(jié)果:

分析一下:

我們在位置1進(jìn)行兩個(gè)變量的定義,成功編譯運(yùn)行得到如上的結(jié)果,符合我們的預(yù)期,然而當(dāng)我們?nèi)サ粑恢?進(jìn)行位置2的定義,程序卻無法進(jìn)行編譯,看來跟我們預(yù)期在編譯過程中直接展開.c文件是一致的。

3、有什么用?

這種方式在bug菌的編碼歷史長河中一般只在兩種情況下用到:

1)維護(hù)毫無設(shè)計(jì)的代碼

有些歷史悠久的項(xiàng)目經(jīng)過了N多位大佬的蹂躪,說實(shí)在的代碼結(jié)構(gòu)上已經(jīng)非??膳铝?,往往每個(gè)源文件內(nèi)容非常之長,為了保持代碼原樣,會(huì)采用#include"xxx.c"把這幾的相關(guān)文件嵌入進(jìn)去,也便于自己后期維護(hù)。

2)測試代碼

在前期進(jìn)行軟件調(diào)試的時(shí)候可能自己會(huì)在不同的文件中安插不同測試功能函數(shù),通過這樣方法可以方便的引入和剔除。

比如說你需要對(duì)源文件中的一些靜態(tài)變量進(jìn)行相關(guān)的監(jiān)控處理,然而又不想在本文件中增加測試代碼,于是便可以在#include"xxx.c"中進(jìn)行測試函數(shù)的編寫來供使用,比如 :

 
 
 
 
  1. //FileName :main  
  2.  #include  
  3.  #include  
  4.   
  5.  static int a = 5;  
  6.  /*************************** 
  7.   * .c文件聲明區(qū)域  
  8.   **************************/ 
  9.  #include"module1.c" 
  10.  
  11. /*************************** 
  12.  * Fuction: main 
  13.  * Author :(公眾號(hào):最后一個(gè)bug)  
  14.  **************************/ 
  15. int main(int argc, char *argv[]) { 
  16.  
  17.     Fuction1();  
  18.     printf("main %d\n",a); 
  19.     printf("歡迎關(guān)注公眾號(hào):最后一個(gè)bug\n"); 
  20.     return 0; 

 
 
 
 
  1. //FileName: Module2.c  
  2.  #include 
  3.  /*************************** 
  4.   * Fuction: Fuction1 
  5.   * Author :(公眾號(hào):最后一個(gè)bug)  
  6.   **************************/ 
  7.  void Fuction1() 
  8.  { 
  9.      printf("Run Fuction1\n"); 
  10.     printf("Fuction1 %d\n",a); 
  11. }  

 

注意了!! 

那么之前有小伙伴說 : " static的作用域僅僅在對(duì)應(yīng)的文件中 ",通過上面的多個(gè).c文件使用靜態(tài)a變量,那么這位小伙伴表述就不那么貼切了!

4、最后總結(jié)

大家在正常的開發(fā)過程中bug菌還是不建議使用#include"xxx.c",因?yàn)樵谖覀兂绦虻脑O(shè)計(jì)過程中,.h文件就是一種外部的引用接口,而.c是對(duì)應(yīng)的內(nèi)部實(shí)現(xiàn),如果濫用#include"xxx.c"有可能造成函數(shù)等等的重復(fù)定義,同時(shí)也對(duì)調(diào)試相關(guān)程序帶來一些困擾,當(dāng)然如果游刃有余就沒啥問題的啦。

不過對(duì)于喜歡寫長文件的小伙伴來說卻是是福音,把一個(gè)長的.c文件分成多個(gè).c文件,這樣至少可以把不知道這種用法的同事面前秀一秀!


新聞標(biāo)題:同事用#include"xxx.c"把我給驚呆了?。?
分享路徑:http://www.dlmjj.cn/article/dpcchij.html