編譯警告-ag真人国际官网
㈠ 用vs編譯c 出現一個警告 什麼意思啊
警告 2 warning c4013: 「getch」未定義;假設外部返回 int d:\文件類\c語言\c 語言項目\c\c\2.c 12 c源代碼是# include
printf("%d",a[5]);getch();}回答:很多涉及字元串的函數是不檢查越界的, 不安全。 所以後來有一套新的安全函數替代這個, 第一個warning就是建議你用 scanf_s代替scanf 第二個 warning是說你用的 getch()沒定義, 所以編譯器假定它是 int getch(void)。 用的函數最好先 include好頭文件
warning c4996: 'sprintf': this function or variable may be unsafe. consider using sprintf_s instead. to disable deprecation, use _crt_secure_no_warnings
已經是安全主導的年代了,這些老舊的東西微軟提供了一些新函式來取代,很簡單他在後面加了_s ,例如gets == gets_s ,strcpy == strcpy_s原因解釋這種微軟的警告,主要因為那些c庫的函數,很多函數內部是不進行參數檢測的(包括越界類的),微軟擔心使用這些會造成內存異常,所以就改寫了同樣功能的函數,改寫了的函數進行了參數的檢測,使用這些新的函數會更安全和便捷。關於這些改寫的函數你不用專門去記憶,因為編譯器對於每個函數在給出警告時,都會告訴你相應的安全函數,查看警告信息就可以獲知,在使用時也再查看一下msdn詳細了解。庫函數改寫例子:
mkdir改寫為 _mkdir
fopen」改寫為 fopen_s
stricmp改寫為 stricmp_s
strcpy改寫為strcpy_s解決方案:1 根據下面的warning提示:參見「fopen」的聲明
消息:「this function or variable may be unsafe. consider using fopen_s instead. to disable deprecation, use _crt_secure_no_deprecate. see online help for details.」
所以可以將函數按warning提示的第二句,改為使用fopen_s函數即可:
例如:file *pfile=fopen("1.txt", "w");改為:file* pfile;
fopen_s(&pfile, "1.txt", "w");
2 還是根據warning提示的地三句話:use _crt_secure_no_deprecate
項目|屬性|配置屬性|c/c |命令行|附加選項,加入【/d "_crt_secure_no_deprecate" 】(註:加入中括弧中完整的內容)
3 降低警告級別:項目|屬性|配置屬性|c/c |常規,自己根據情況降低警告級別(此法不推薦)
注意:高度重視警告:使用編譯器的最高警告級別。應該要求構建是干凈利落的(沒有警告)。理解所有警告。通過 修改代碼而不是降低警告級別來排除警告。
編譯器是你的朋友。如果它對某個構造發出警告,這經常是說明你的代碼中存在潛在的問題。成功的構建應該是無聲無息的(沒有警告的)。【《
㈡ c語言: 這樣的編譯警告
在函數a中返回的sth void 不是void* 而你在函數中又試圖以void*的方式去使用它,所以要對你作出提醒。
㈢ c語言編譯警告,求解
你是在unix下吧,unix下建立的文件末尾都有一個空行,所以編譯器也要求正常的文件有一個空行作為末尾。加工空行就行了
㈣ c語言,編譯出現警告了
1)警告的原因是編譯時,編譯器認為p變數沒有賦初值;
2)其實程序中已經在if else 中對p的初始值進行了處理,但編譯器比較「笨」沒有看出來
3)你可以完全不理會這個警告;
4)如果確實你不想讓編譯器出這樣的警告,在scanf語句前,加上 p = 0 , 顯式地為p賦初值
㈤ 51編程編譯警告,,該怎麼處理
有些軟體是經過了壓縮和加殼的,所以反編譯之前如果沒用脫殼處理的話可能會出現這種情況,反編之前最好是先用fileinfo之類的軟體查看一下這個軟體是否加過殼。
㈥ 編譯時出現警告,怎麼回事
如上圖所示, 我用qt5.5 新建的一個項目, 在運行時下面出現警告 ppsjy:[myhookproc]__read web cfg: success ----- :
ps: 我是在安裝了qt5.9後出現的這個問題, 之後把qt5.9和qt5.5都御載了再安裝qt5.5 可這個警告還在, 怎麼回事?
你卸載的時候,可能有qt記錄殘留,所以警告還在吧。一般qt的運行配置保存在:c:users用戶appdataroamingqtproject 和 c:users用戶appdatalocalqtproject,你可以嘗試把這個文件夾一起刪了試試!
使用vs版本試試
㈦ c 編譯的時候出現這個警告
int node[12][2]
所以系統默認node應該是賦值給一個指向數組長度為2的指針。
也就是說
你應該讓它賦值給它默認的才不會有警告,而你程序中
是賦值給一個指向一個數字的指針,也就是長度為1.
void creategraph(int *node,int num)
所以,才會產生警告。
下面我改了下你的程序,也可以輸出結果,但是沒有警告了。
#include
typedef int intarray[2];
int matrix[6][6];
/*創建圖 */
void creategraph(int *node,int num)
{
int from; /*邊的起點*/
int to; /*邊的終點*/
int i;
for(i=0;i
from=node[i*2];
to=node[i*2 1];
matrix[from][to]=1;
}
}
void creategraph1(intarray *node,int num)
{
int from; /*邊的起點*/
int to; /*邊的終點*/
int i;
for(i=0;i
from=*(*(node i) 0);
to=*(*(node i) 1);
matrix[from][to]=1;
}
}
/*主程序:創建圖後,將鄰接矩陣輸出*/
void main()
{
int node[12][2]={ {1,2},{2,1},
{1,3},{3,1},
{2,3},{3,2},
{2,4},{4,2},
{3,5},{5,3},
{4,5},{5,4}};
int i,j;
for(i=1;i<=5;i )
for(j=1;j<=5;j )
matrix[i][j]=0;
creategraph1(node,12);
printf("graph is:\n");
for(i=1;i<=5;i )
{for(j=1;j<=5;j )
printf("%d ",matrix[i][j]);
printf("\n");}
getch();
}
如上,creategraph1()函數我新寫的,可以實現你說的,但是不會產生警告。
其實這種多維數組的傳遞,確實很考指針,我空間中寫過這方面的
http://hi..com/huifeng00/blog/item/83a3c19bdcbf83026f068c37.html
你有時間可以看下,應該算詳細吧,不明白hi我。
㈧ java程序可以編譯 但是會有警告 為什麼呢
告警是編譯時檢查發現不符合一些常用約定,但是不妨礙執行。
thestaticfieldtext3.ishouldbeaccessedinastaticway
以下是修改過的代碼。
publicclasstext3{
staticinti=47;//靜態方法共用內存
publicvoidcall(){
system.out.println("調用call方法");
for(i=0;i<3;i ){
system.out.print(i "");
if(i==2){
system.out.println();
}
}
}
publicstaticintgeti(){
returni;
}
publicstaticvoidseti(inti){
text3.i=i;
}
publictext3(){
}
publicstaticvoidmain(string[]args){
//todoauto-generatedmethodstub
text3t1=newtext3();
text3t2=newtext3();
text3.seti(60);//這里有警告
text3.i ;
system.out.println("第一個實例對象調用變數i的結果為i=" text3.geti());//這里有警告
t1.call();//調用call方法後,i的值變成了3
text3.i ;
system.out.println("第二個實例對象調用變數i的結果為i=" text3.geti());//這里有警告
t2.call();
}
}
㈨ c語言編譯警告問題
你那個數組賦值有問題。
㈩ c語言編譯警告
void
main(void);函數被定義多次,這么明顯的錯誤肯定是其他.c文件定義了main函數了
另外你的這種寫法完全不符合c99啊
void
main(void)
應該寫成
int
main(void);或者
int
main(char
*argc,char*
argv[])