1. 程式人生 > >(十八)多檔案專案及編譯過程

(十八)多檔案專案及編譯過程

extern

  • 在宣告變數的時候不能加初始值

    extern int a =10;//錯誤
    
  • 在訪問other.cpp的全域性函式時,extern可以不寫

  • 在訪問other.cpp的全域性變數時,必須加上extern

多檔案專案的生成

  • 編譯:將多個cpp檔案轉化為中間檔案*.obj
  • 連結:將多個obj檔案轉化為*.exe可執行程式

標頭檔案#include指令

  • 將類的定義與函式名稱寫在*.h裡面,將函式具體實現寫在other.cpp裡面,主函式為main.cpp

巨集定義#define

  • 所有#開頭的指令都是預處理指令

  • 在預處理時,採用的是原文替換,#include就是如此

    #define n 1+2
    
    int main()
    {
        int a = 4 * n;
    }
    

    此時n不是3,而是原文替換為1+2,即a = 4 * 1 + 2,a的值為6

  • 條件編譯指令

#if
#endif

#ifdef
#endif
  • 標頭檔案的重複包含問題
#include "Object.h"
#include "Object.h"//重複包含相同的標頭檔案
#ifndef _OBJECT_H
#define _OBJECT_H
...
#endif

*main函式的引數和返回值

  • main函式的標準形式
int main()
    
int main(int argc,char* argv[])

argc表示命令列引數的個數,argv表示命令列引數的值

在命令列視窗執行這個程式

#include <stdio.h>
int main(int argc, char** argv)
{
    for(int i=0;i<argc;i++)
    {
        printf("%s\n",argv[i]);
    }
}

命令列切換到* .exe所在目錄,輸入*.exe 123 abc 456 def

會依次輸出*.exe 123 abc 456 def

這說明argc值是5,argv[]儲存的字串就是以上字元

static修飾變數

  • 在other.cpp中用static修飾一個變數,該變數稱為靜態變數,僅能在other.cpp內可見
  • 此時在main函式中不能用extern來訪問它,static修飾函式時同理