當(dāng)前位置:首頁(yè) > IT技術(shù) > 編程語(yǔ)言 > 正文

C++ extern關(guān)鍵字的理解
2022-03-06 18:03:35

@TOC

extern關(guān)鍵字理解

  • extern關(guān)鍵字可以置于變量和函數(shù)名前,以標(biāo)示變量或函數(shù)定義在別的函數(shù)中,提示編譯器遇到此變量時(shí)在其它模塊中尋找定義
//contract.h
//
// Created by Administrator on 2022/3/6.
//

#ifndef CSTART01_CONTRACT_H
#define CSTART01_CONTRACT_H

extern int i;
extern int a[];

#endif //CSTART01_CONTRACT_H
//cpx.cpp
//
// Created by Administrator on 2022/3/6.
//
int i = 10;
int a[] = {1,2,3,4};
//main.cpp
#include<iostream>
#include "contract.h"
using namespace std;

int main()  {
    cout << "hello world" << endl;
    cout << i << endl;
    for (int j = 0; j < 3; ++j) {
        cout << a[j] << endl;
    }
}
  • extern"C"的作用是可以解析并執(zhí)行C語(yǔ)言代碼,C+函數(shù)重載的時(shí)候可能修改了函數(shù)的名稱(chēng),C語(yǔ)言沒(méi)有函數(shù)重載,下面是實(shí)際的例子
//test.c
#include "test.h"

void show(){
    printf("hello world");
}
//test.h
#pragma once //防止頭文件重復(fù)編譯

#include <stdio.h>//C language code
#ifndef CSTART01_TEST_H
#define CSTART01_TEST_H

void show();//global method

#endif //CSTART01_TEST_H
//main.cpp
#include<iostream>

using namespace std;

//按照C語(yǔ)言方式做連接
extern "C" void show();//表示在別的文件中去找show方法

int main()  {
    show();//C++中函數(shù)是可以重載的,編譯器會(huì)改變函數(shù)的名稱(chēng),這行代碼會(huì)產(chǎn)生錯(cuò)誤

    system("pause");//程序暫停,需要按任意鍵繼續(xù)
    return EXIT_SUCCESS;
}
  • 下面是第2種實(shí)現(xiàn)方式
//main.cpp
#include<iostream>
#include "test.h"
using namespace std;

//按照C語(yǔ)言方式做連接
//extern "C" void show();//表示在別的文件中去找show方法

int main()  {
    show();//C++中函數(shù)是可以重載的,編譯器會(huì)改變函數(shù)的名稱(chēng),這行代碼會(huì)產(chǎn)生錯(cuò)誤

    system("pause");//程序暫停,需要按任意鍵繼續(xù)
    return EXIT_SUCCESS;
}
//test.h
//
// Created by Administrator on 2022/3/6
//
#pragma once //防止頭文件重復(fù)編譯

//程序的作用是如果是C++代碼就多加這么一行話extern "C"{}
#ifdef __cplusplus
extern "C" {
#endif
#include <stdio.h>//C language code

void show();//global method

#ifdef __cplusplus
}
#endif

本文摘自 :https://blog.51cto.com/u

開(kāi)通會(huì)員,享受整站包年服務(wù)立即開(kāi)通 >