編寫一個程式區分是C原始碼還是C++原始碼
阿新 • • 發佈:2018-12-02
C++是在C語言的基礎上建立的,所以在C++程式中沿用了很多C語言的東西,如printf函式既可以在C程式中使用,也可以在C++程式中使用,只需要引入相關的庫檔案即可。
如何區分是.c檔案還是.cpp檔案?
test.cpp
#include<cstdio>
int main(void){
printf("hello world");
return 0;
}
test.c
#include<stdio.h>
int main(void){
printf("hello world");
return 0;
}
上邊test.c和test.cpp原始檔如果使用g++進行編譯,g++會把.c檔案當作.cpp檔案進行處理,這樣是區分不出來的。實際上C++編譯器在編譯C++程式中會向檔案中新增__cpluscplus巨集 ,我們可以利用這個巨集來區分當前原始檔是C++程式還是C程式。
#include<stdio.h>
int main(void){
#ifdef __cpluscplus
printf("c++\n");
#else
printf("c\n");
#endif
return 0;
}
此外,實際上我們在看C庫的一些原始碼時,也會如上邊的巨集定義,因為C庫函式完可能被C++程式使用,但是兩者生成符號的規則卻完全不相同。為了使得生成符號一致,需要加入extern “C”{}。
來自cstdio的一段原始碼就是用到了__cplusplus巨集: