欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

簡單講解C++的內部和外部函數以及宏的定義

 更新時間:2015年09月11日 15:46:25   投稿:goldensun  
這篇文章主要介紹了簡單講解C++的內部和外部函數以及宏的定義,是C++入門學習中的基礎知識,需要的朋友可以參考下

C++內部函數和外部函數
函數本質上是全局的,因為一個函數要被另外的函數調用,但是,也可以指定函數只能被本文件調用,而不能被其他文件調用。根據函數能否被其他源文件調用,將函數區(qū)分為內部函數和外部函數。
內部函數

如果一個函數只能被本文件中其他函數所調用,它稱為內部函數。在定義內部函數時,在函數名和函數類型的前面加static。函數首部的一般格式為:

  static 類型標識符 函數名(形參表);



  static int fun(int a, int b);


內部函數又稱靜態(tài)(static)函數。使用內部函數,可以使函數只局限于所在文件。如果在不同的文件中有同名的內部函數,互不干擾。通常把只能由同一文件使用的函數和外部變量放在一個文件中,在它們前面都冠以static使之局部化,其他文件不能引用。
外部函數

在定義函數時,如果在函數首部的最左端冠以關鍵字extern,則表示此函數是外部函數,可供其他文件調用。如函數首部可以寫為:

  extern int fun (int a, int b);


這樣,函數fun就可以為其他文件調用。如果在定義函數時省略extern,則默認為外部函數。本教程前面所用的函數都是外部函數。

在需要調用此函數的文件中,用extern聲明所用的函數是外部函數。

【例】輸入兩個整數,要求輸出其中的大者,用外部函數實現。

/*******file1.cpp(文件1)*******/
#include <iostream>
using namespace std;
int main( )
{
  extern int max(int,int); //聲明在本函數中將要調用在其他文件中定義的max函數
  int a,b;
  cin>>a>>b;
  cout<<max(a,b)<<endl;
  return 0;
}
/*******file2.cpp(文件2)*******/
int max(int x,int y)
{
  int z;
  z=x>y?x:y;
  return z;
}

運行情況如下:

7 -34↙
7

在計算機上運行一個含多文件的程序時,需要建立一個項目文件(project file),在該項目文件中包含程序的各個文件。詳細情況請查看:VC6.0使用教程。

通過此例可知:使用extern聲明就能夠在一個文件中調用其他文件中定義的函數,或者說把該函數的作用域擴展到本文件。extern聲明的形式就是在函數原型基礎上加關鍵字extern。由于函數在本質上是外部的,在程序中經常要調用其他文件中的外部函數,為方便編程,C++允許在聲明函數時省寫extern。例4.15程序main函數中的函數聲明可寫成:

  int max(int, int);

這就是我們多次用過的函數原型。由此可以進一步理解函數原型的作用。用函數原型能夠把函數的作用域擴展到定義該函數的文件之外(不必使用extern)。只要在使用該函數的每一個文件中包含該函數的函數原型即可。函數原型通知編譯系統(tǒng):該函數在本文件中稍后定義,或在另一文件中定義。

利用函數原型擴展函數作用域最常見的例子是#include命令的應用。在#include命令所指定的頭文件中包含有調用庫函數時所需的信息。例如,在程序中需要調用sin函數,但三角函數并不是由用戶在本文件中定義的,而是存放在數學函數庫中的。按以上的介紹,必須在本文件中寫出sin函數的原型,否則無法調用sin函數。sin函數的原型是:

  double sin(double x);


本來應該由程序設計者在調用庫函數時先從手冊中查出所用的庫函數的原型,并在程序中一一寫出來,但這顯然是麻煩而困難的。為減少程序設計者的困難,在頭文件cmath中包括了所有數學函數的原型和其他有關信息,用戶只需用以下#include命令:

  #include <cmath>


即可。這時,在該文件中就能合法地調用各數學庫函數了。

C++宏定義#define
可以用#define命令將一個指定的標識符(即宏名)來代表一個字符串。定義宏的作用一般是用一個短的名字代表一個長的字符串。它的一般形式為:

  #define 標識符 字符串


這就是已經介紹過的定義符號常量。如:

  #define PI 3.1415926


還可以用#define命令定義帶參數的宏定義。其定義的一般形式為:

  #define 宏名(參數表) 字符串


如:

  #define S(a, b) a*b //定義宏S(矩形面積),a、b為宏的參數

使用的形式如下:

  area=S(3, 2);


用3、2分別代替宏定義中的形式參數a和b,即用3*2代替S(3, 2)。因此賦值語句展開為:

  area=3*2;


由于C++增加了內置函數(inline),比用帶參數的宏定義更方便,因此在C++中基本上已不再用#define命令定義宏了,主要用于條件編譯中。

相關文章

  • C語言排序方法(冒泡,選擇,插入,歸并,快速)

    C語言排序方法(冒泡,選擇,插入,歸并,快速)

    這篇文章給大家分享C語言所有經典排序方法,文章給大家提供完整的實例代碼幫助大家快速學習掌握C語言排序方法,感興趣的朋友一起看看吧
    2021-08-08
  • Matlab實現多子圖同步調整視角

    Matlab實現多子圖同步調整視角

    這篇文章主要為大家介紹了如何利用Matlab實現多子圖同步調整視角,文中的示例代碼講解詳細,對我們學習Matlab有一定幫助,需要的可以參考一下
    2022-03-03
  • c++結構體排序方式(1條件,多條件)

    c++結構體排序方式(1條件,多條件)

    這篇文章主要介紹了c++結構體排序方式(1條件,多條件),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C語言驅動開發(fā)之內核通過PEB獲取進程參數

    C語言驅動開發(fā)之內核通過PEB獲取進程參數

    PEB結構(Process Envirorment Block Structure)其中文名是進程環(huán)境塊信息。本文將通過PEB實現獲取進程參數,感興趣的小伙伴可以了解一下
    2022-10-10
  • 基于easyx的C++實現貪吃蛇

    基于easyx的C++實現貪吃蛇

    這篇文章主要為大家詳細介紹了基于easyx的C++實現貪吃蛇,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C++實現和電腦對戰(zhàn)三子棋實例

    C++實現和電腦對戰(zhàn)三子棋實例

    大家好,本篇文章主要講的是C++實現和電腦對戰(zhàn)三子棋實例,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • C++對string進行大小寫轉換操作方法

    C++對string進行大小寫轉換操作方法

    這篇文章主要介紹了C++對string進行大小寫轉換操作方法,本文通過兩種方法結合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2023-02-02
  • OpenCV實現圖像連通域

    OpenCV實現圖像連通域

    這篇文章主要為大家詳細介紹了OpenCV實現圖像連通域,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C程序中Ubuntu、stm32的內存分配問題

    C程序中Ubuntu、stm32的內存分配問題

    這篇文章主要介紹了C程序中Ubuntu、stm32的內存分配問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • 深入探討:main函數執(zhí)行完畢后,是否可能會再執(zhí)行一段代碼?

    深入探討:main函數執(zhí)行完畢后,是否可能會再執(zhí)行一段代碼?

    本篇文章是對main函數執(zhí)行完畢后,是否可能會再執(zhí)行一段代碼,進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05

最新評論