1. 程式人生 > >pragma GCC poison GCC編譯遮蔽不安全函式

pragma GCC poison GCC編譯遮蔽不安全函式

收集不安全的c函式,使用預編譯屬性禁止這些函式在專案原始碼中使用

1.poison.h

#ifndef __POISON_H_
#define __POISON_H_

#ifdef __cplusplus
extern "C"{
#endif /* __cplusplus */


/*****************************************************************************************************************************/
/* 標準輸入輸出被禁用函式列表-註釋中為對應安全替代函式 */
#pragma GCC poison	gets						/* char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)*/




/*****************************************************************************************************************************/
/* 字串處理-註釋中為對應安全替代函式 */
#pragma GCC poison	strtok						/* char *__strtok_r (char *__restrict __s,
													 const char *__restrict __delim,
													 char **__restrict __save_ptr) */ 													 
#pragma GCC poison	strcpy						/* char *strncpy (char *__restrict __dest,
													const char *__restrict __src, size_t __n) */
#pragma GCC poison 	strcat						/* char *strncat (char *__restrict __dest, const char *__restrict __src,
													size_t __n) */						
#pragma GCC poison 	sprintf						/* int snprintf (char *__restrict __s, size_t __maxlen,
													const char *__restrict __format, ...) */												
#pragma GCC poison 	vsprintf					/* int vsnprintf (char *__restrict __s, size_t __maxlen,
													const char *__restrict __format, _G_va_list __arg)*/									
													
																					
/*****************************************************************************************************************************/													
/* 時間系統被禁用函式列表-註釋中為對應安全替代函式 */
#pragma GCC poison 	gmtime 						/*	struct tm *gmtime_r(const time_t *timep, struct tm *result); */
#pragma GCC poison 	ctime						/*	char *ctime_r(const time_t *timep, char *buf); */
#pragma GCC poison 	asctime						/*	char *asctime_r(const struct tm *tm, char *buf); */
#pragma GCC poison	localtime					/*	struct tm *localtime_r(const time_t *timep, struct tm *result) */

/* 待確定修改項 */  
#pragma GCC poison	localtime_r 				/* 	int bsLocalTime(time_t *pTimeT, struct tm *pTm)	*/



/*****************************************************************************************************************************/
/* 網路介面被禁用函式列表-註釋中為對應安全替代函式 */
#pragma GCC poison	gethostbyaddr				/* 	int gethostbyaddr_r (const void *__restrict __addr, __socklen_t __len,
													int __type,
													struct hostent *__restrict __result_buf,
													char *__restrict __buf, size_t __buflen,
													struct hostent **__restrict __result,
													int *__restrict __h_errnop);	*/
#pragma GCC poison	gethostbyname				/* 	int gethostbyname_r (const char *__restrict __name,
													struct hostent *__restrict __result_buf,
													char *__restrict __buf, size_t __buflen,
													struct hostent **__restrict __result,
													int *__restrict __h_errnop);	*/
//#pragma GCC poison	inet_ntoa					/* 	暫無	*/



/*****************************************************************************************************************************/
/* 自定義函式-註釋中為對應安全替代函式 */



#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif

相關推薦

pragma GCC poison GCC編譯遮蔽安全函式

收集不安全的c函式,使用預編譯屬性禁止這些函式在專案原始碼中使用1.poison.h#ifndef __POISON_H_ #define __POISON_H_ #ifdef __cplusplus extern "C"{ #endif /* __cplusplus */

在VS2013 使用C語言庫函式,出現出現錯誤,提示使用安全函式use _CRT_SECURE_NO_WARNINGS

在VS 2013 中編譯 C 語言專案,如果使用了 scanf 函式,編譯時便會提示如下錯誤: error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disab

C中安全函式

 C 中大多數緩衝區溢位問題可以直接追溯到標準 C 庫。最有害的罪魁禍首是不進行自變數檢查的、有問題的字串操作(strcpy、strcat、sprintf 和 gets)。一般來講,象“避免使用 strcpy()”和“永遠不使用 gets()”這樣嚴格的規則接近於這個要求。

消除VS中對使用安全函式的error

方法一:.在預編譯標頭檔案stdafx.h裡(注意:一定要在沒有include任何標頭檔案之前)定義下面的巨集:   #define _CRT_SECURE_NO_WARNINGS 方法二:更改預處理定義:   專案->屬性->配置屬性->C/C++ -

realloc安全函式

C語言 realloc() 函式位於 stdlib.h 標頭檔案中,其原型為:    void *realloc(void *ptr, size_t size);realloc() 會將 ptr 所指向的記憶體塊的大小修改為 size,並將新的記憶體指標返回。設之前記憶體塊

#pragma GCC poison 的一個有趣特性

今天做程式設計的作業時又看見一題,讓使用char*實現一個"String"類(與std::string相似),但是要求上傳的String類的.cpp實現程式碼卻沒有禁用string,導致一些函式直接可以先轉換為string物件,用string提供的函式實現以後再轉換回cha

關於三角函式、反三角函式在VC和linux gcc下的編譯

寫法: 1.都要包含 <math.h> 2.三角函式,比如計算sin(30),應寫 double  a; a = sin(30 * 3.1415926 /180); 3.反三角函式,比如arctan(1),應寫 double  b; b

gcc和g++編譯c或者c++檔案碰到的問題

gcc和g++都是GNU(組織)的一個編譯器。             誤區一:gcc只能編譯c程式碼,g++只能編譯c++程式碼       兩者都可以,但是請注意:  

gcc/g++/make 編譯資訊帶顏色輸出

如果編譯一個專案錯誤警告太多,非常不好找,所以非常希望輸出資訊可以帶有顏色。 可是 gcc 4.9.0 之前的版本並不支援,很多情況下是不能替換編譯器的,比如使用交叉編譯器, 也可以使用 colorgcc,但我覺得不是特別好,需要配置,如果使用Makefile還要更改編譯器設定,

GCC 程式的編譯過程和連結原理

一、C/C++檔案的編譯過程: 先來看一下gcc的使用方法和常用選項 提示:gcc --help Ⅰ、使用方法: gcc [選項] 檔名

搭建完整的arm-linux-gcc等交叉編譯環境

https://www.cnblogs.com/uestc-mm/p/6656325.html 安裝環境        Linux版本:Ubuntu 12.04    核心版本:Linux 3.5.0   交叉編譯器版本:

利用gcc的__attribute__編譯屬性section子項構建初始化函式

gcc的__attribute__編譯屬性有很多子項,用於改變作用物件的特性。這裡討論section子項的作用。 __attribute__的section子項使用方式為: __attribute__((section("section_name"))) 其作用是將作用的

讓cmake顯示gcc/g++的編譯資訊

專案目錄結構 第一個專案,肯定是大家都懂的“hello world”了。那就先來看一下這個“龐大”的專案結構吧。 1234567[study@leoox hello]$tree.|--CMakeLists.txt|--build`--main.c1dire

gcc程式的編譯過程和連結原理

一、C/C++檔案的編譯過程: 先來看一下gcc的使用方法和常用選項 提示:gcc --help Ⅰ、使用方法: gcc [選項] 檔名 Ⅱ、常用選項: 選項 含義 -v 檢視gcc編譯器的版

windows下用gcc命令列編譯並執行oc程式

首先,我的GNUstep安裝在D盤的GNUstep資料夾下,oc程式放在E盤的oc資料夾下,這裡以程式WordLength.c為例說明。 編譯oc程式: 開啟dos,然後將路徑定位到E盤的oc路徑下 命令列的寫法:E:         &nbs

gcc編譯器中編譯階段的四個過程

 編譯階段的四個過程 1.預處理 gcc -E 檔名.c 經過預處理形成.i檔案 預處理階段三個過程:標頭檔案展開;巨集替換;條件編譯; 2.編譯 gcc -c 檔名.c 編譯過後形成.o檔案(目標檔案),編譯階段進行語法檢查和詞法分析; 3.彙編 gcc -S 檔

android出現注: 某些輸入檔案使用或覆蓋了已過時的 API。 注: 有關詳細資訊, 請使用 -Xlint:deprecation 重新編譯。 注: 某些輸入檔案使用了未經檢查或安全的操作。 注

使用android studio打包應用程式出現如下錯誤: 注: 某些輸入檔案使用或覆蓋了已過時的 API。 注: 有關詳細資訊, 請使用 -Xlint:deprecation 重新編譯。 注: 某些輸入檔案使用了未經檢查或不安全的操作。 注: 有關詳細

gcc和交叉編譯標頭檔案包含問題

eclipse開發環境下,同一個工程,使用gcc成功編譯,但是使用交叉編譯,提示找不到標頭檔案,這是因為兩者預設的標頭檔案包含路徑不一樣。 在LINUX程式設計當中,經常會遇到標頭檔案包含的問題,那麼這些標頭檔案到底在哪個路徑下?具體的標頭檔案路徑依賴於程

gcc 常見的編譯錯誤,警告總結

最近開始寫部落格了,而且總會有人問一些編譯警告,錯誤怎麼回事,怎麼修改的問題,於是決定開始認真總結平時遇到的相關問題。今天就開始慢慢積累總結吧,也建議大家平時養成總結的好習慣,即使從現在開始也不晚。好的開始等於成功了一半。1、error: invalid operands t

【轉】gcc/g++常用編譯選項和gdb常用除錯命令

  gcc/g++編譯器是我們寫編譯C/C++程式時離不開的編譯工具,而gdb又是除錯C/C++程式的利器,這一篇文章我們記錄一下它們的慣常用法。 gcc/g++常用編譯選項 選項 作