@TOC
extern關(guān)鍵字理解
- extern關(guān)鍵字可以置于變量和函數(shù)名前,以標(biāo)示變量或函數(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語言代碼,C+函數(shù)重載的時候可能修改了函數(shù)的名稱,C語言沒有函數(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語言方式做連接
extern "C" void show();//表示在別的文件中去找show方法
int main() {
show();//C++中函數(shù)是可以重載的,編譯器會改變函數(shù)的名稱,這行代碼會產(chǎn)生錯誤
system("pause");//程序暫停,需要按任意鍵繼續(xù)
return EXIT_SUCCESS;
}
- 下面是第2種實現(xiàn)方式
//main.cpp
#include<iostream>
#include "test.h"
using namespace std;
//按照C語言方式做連接
//extern "C" void show();//表示在別的文件中去找show方法
int main() {
show();//C++中函數(shù)是可以重載的,編譯器會改變函數(shù)的名稱,這行代碼會產(chǎn)生錯誤
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