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++常用編譯選項 選項 作