日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言中预定义宏的应用

發布時間:2024/8/23 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言中预定义宏的应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

????? __LINE__?????????????????????? 在源代碼中插入當前源代碼行號??
????? __FILE__?????????????????????? 在源代碼中插入當前源代碼文件名??
????? __FUNCTION__(__fucn__)???????? 在源代碼中插入當前源代碼函數名
????? __DATE__?????????????????????? 在源代碼中插入當前編譯日期〔注意和當前系統日期區別開來〕??
????? __TIME__?????????????????????? 在源代碼中插入當前編譯時間〔注意和當前系統時間區別開來〕????????
????? __STDC__?????????????????????? 當要求程序嚴格遵循ANSIC標準時該標識符被賦值為1。??
????? __cplusplus??
? 標識符__LINE__,__FILE__,__func__通常用來調試程序;??

? 標識符__DATE__和__TIME__通常用來在編譯后的程序中加入一個時間標志,以區分程序的不同版本;

? 當要求程序嚴格遵循ANSIC標準時,標識符__STDC__就會被賦值為1;

? 當用C++編譯程序編譯時,標識符__cplusplus就會被定義。

#include <stdio.h>
#include <stdlib.h>
void why_me();
int main()
{
??? printf( "The file is %s./n", __FILE__ );
??? printf( "The date is %s./n", __DATE__ );
??? printf( "The time is %s./n", __TIME__ );
??? printf( "This is line %d./n", __LINE__ );
??? printf( "This function is %s./n", __func__ );
??? why_me();
??? return 0;
}

void why_me()
{
??? printf( "This function is %s/n", __func__ );
??? printf( "The file is %s./n", __FILE__ );
??? printf( "This is line %d./n", __LINE__ );
}


時常在cpp的代碼之中看到這樣的代碼:

#ifdef __cplusplus
extern "C" {
#endif

//一段代碼

#ifdef __cplusplus
}
#endif
  

??? 這樣的代碼到底是什么意思呢?首先,__cplusplus是cpp中的自定義宏,那么定義了這個宏的話表示這是一段cpp的代碼,也就是說,上面的代碼的含義是:如果這是一段cpp的代碼,那么加入extern "C"{和}處理其中的代碼。

  要明白為何使用extern "C",還得從cpp中對函數的重載處理開始說起。在c++中,為了支持重載機制,在編譯生成的匯編碼中,要對函數的名字進行一些處理,加入比如函數的返回類型等等.而在C中,只是簡單的函數名字而已,不會加入其他的信息.也就是說:C++和C對產生的函數名字的處理是不一樣的. 目的就是主要實現C與C++的相互調用問題。


?
c.h的實現
#ifndef _c_h_
#define _c_h_

#ifdef __cplusplus
extern "C" {
#endif

void C_fun();

#ifdef __cplusplus
}
#endif

#endif
-----------------------------------
c.c的實現
#include "c.h"
void C_fun()
{
}
------------------------------------
在cpp.cpp中調用c.c中的C_test()
cpp.cpp的實現
#include "c.h"
int main()
{
???? C_fun()
}
其中__cplusplus是C++編譯器的保留宏定義.就是說C++編譯器認為這個宏已經定義了.
所以關鍵是extern "C" {}
extern "C"是告訴C++編譯器件括號里的東東是按照C的obj文件格式編譯的,要連接的話按照C的命名規則去找.
==========================
那么C中是如何調用C++中的函數cpp_fun()呢?
因為先有C后有C++, 所以只能從C++的代碼中考慮了.
加入C++中的函數或變量有可能被C中的文件掉用,則應該這樣寫,也是用extern "C"{}
不過是代碼中要加,頭文件也要加,因為可能是C++中也調用
--------------------------------------
cpp.h的實現
#ifndef _c_h_
#define _c_h_
#ifdef __cplusplus
extern "C" {
#endif
void CPP_fun();
#ifdef __cplusplus
}
#endif
#endif
.-------------------------------------------
Cpp.cpp的實現
extern "C" {??? //告訴C+++編譯器,擴號里按照C的命名規則編譯
void CPP_fun()
{
???? .....
}
?
?
總結
C和C++對函數的處理方式是不同的.extern "C"是使C++能夠調用C寫作的庫文件的一個手段,如果要對編譯器提示使用C的方式來處理函數的話,那么就要使用extern "C"來說明。

總結

以上是生活随笔為你收集整理的C语言中预定义宏的应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲少妇网站 | 国产黄色电影 | 玖玖热视频 | 天天槽 | 成片免费观看 | 久久春色 | 成人精品免费 | 91theporn国产在线观看 | 特一级黄色大片 | 97超碰人人 | 极品国产在线 | 成人3d动漫一区二区三区 | 国产精品午夜在线 | 91黑人精品一区二区三区 | 久久亚洲AV成人无码国产人妖 | 国产毛毛片 | 免费人成视频在线播放 | 99国产成人精品 | 91亚洲精品久久久久久久久久久久 | 黄av网 | 天堂中文字幕在线观看 | 成人h片在线观看 | 黄色资源在线 | 欧美精品一卡二卡 | 中文字幕无线精品亚洲乱码一区 | 裸体裸乳被免费看视频 | 亚洲美女福利 | 视频一区二区不卡 | 精品久久久久久亚洲精品 | 日韩av不卡在线播放 | 亚洲一区二区乱码 | 亚洲人成在线观看 | 麻豆视频在线观看免费 | 香蕉综合在线 | 亚洲成人福利在线 | 国产精品高清在线 | 激情五月婷婷综合网 | 美国毛片av | 精品国产一区二区视频 | 毛片99| 亚洲av毛片一区二二区三三区 | 懂色一区二区三区免费观看 | 国产网红在线 | 日本欧美国产在线 | 中国美女一级黄色片 | 欧美激情精品 | 无码人妻h动漫 | 三级网站免费看 | 久久久久久国产精品免费 | 超碰碰97| 国模无码国产精品视频 | 爱臀av | 蜜桃综合网| 免费成人黄色片 | 免费观看成年人视频 | 少妇aaaa| 亚洲一区a| 午夜精品无码一区二区三区 | 久久99国产精品久久99 | 91成品人影院 | 免费一区二区 | 国产不卡视频 | 天堂资源中文 | 91成人久久 | 高潮喷水一区二区三区 | 成年人性生活视频 | 奶水旺盛的少妇在线播放 | 蜜臀久久99静品久久久久久 | 欧美性猛交一区二区三区精品 | 亚洲欧美视频在线播放 | 女同中文字幕 | 中文字幕av观看 | 久久成人综合网 | 国产精品ⅴa有声小说 | 欧美国产精品一区 | 欧美色涩在线第一页 | 国模杨依粉嫩蝴蝶150p | 中国黄色录像一级片 | 九一在线观看免费高清视频 | 欧美性一区二区 | 麻豆视频在线看 | 9999视频| 久久偷看各类wc女厕嘘嘘偷窃 | 三级黄色免费片 | 日本一区二区三区在线看 | 精品无码三级在线观看视频 | 日本中文字幕在线视频 | 日本成人三级电影 | 香蕉视频久久久 | 色天天色综合 | 国产乡下妇女做爰毛片 | 一级片中文字幕 | 黄色一级片在线播放 | 久久人人插 | 欧美性视频网站 | 国产精品无码久久久久成人app | 亚洲国产精品成人va在线观看 | 亚洲av少妇一区二区在线观看 | 日韩视频在线观看一区 |