עבור לתוכן

קומפליציה בשפת C ב VS2010

Featured Replies

פורסם

כשאני מקמפל את הקובץ המצורף בסיומת cpp, הקוד מתקפל (למעט כמה אזהרות).

כשאני משנה את הסיומת ל c, מתווספות אינסוף אזהרות והקוד לא מתקפל.

למה זה קורה? אשמח לעזרה.

פורסם

אם הקוד לא מתקמפל אז אלה לא אזהרות, אלה שגיאות.

איזה אזהרות ושגיאות אתה מקבל? אתה מצפה שננחש?

השגיאה היחידה שאני רואה בקוד היא שבעקרון לפי התקן של C אסור להגדיר משתנים באמצע בלוק (מותר רק בתחילתו) בעוד שב-++C מותר, אבל אני לא יודע אם VS אוכף את זה.

פורסם
  • מחבר

העברתי את כל ההצהרות לתחילת הקוד ועכשיו זה עובד, תודה!

מה משמעות האזהרות הבאות:

 warning C4007: 'main' : must be '__cdecl'
warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

פורסם

לגבי האזהרה הראשונה: יצרת את הפרוייקט כ-Win32 Console Application או כ-Empty Project? אם כ-Win32 Console Application אז יכול להיות שזה מה שגורם לאזהרה, ואז כדאי שתנסה ליצור את הפרויקט מחדש כ-Empty Project. אם לא, אז תנסה אולי להחליף את שורת ה-main בזה:

int main(void) {

או זה:

int main(int argc, char* argv[]) {

לגבי האזהרה השנייה: הפונקציה scanf חשופה לסוג של פירצת אבטחה שנקראת Buffer Overflow (אבל רק אם משתמשים בה כדי לקרוא מחרוזות, כלומר ב-s%). הקומפיילר מזהיר מפני זה ומייעץ להשתמש בגרסה "בטוחה" של הפונקציה בשם scanf_s, אבל בשביל מישהו שרק לומד לתכנת זה לא כזה קריטי (במיוחד אם אתה לא משתמש בה לקרוא מחרוזות).

פורסם
  • מחבר

תודה

פורסם
אם הקוד לא מתקמפל אז אלה לא אזהרות, אלה שגיאות.

איזה אזהרות ושגיאות אתה מקבל? אתה מצפה שננחש?

השגיאה היחידה שאני רואה בקוד היא שבעקרון לפי התקן של C אסור להגדיר משתנים באמצע בלוק (מותר רק בתחילתו) בעוד שב-++C מותר, אבל אני לא יודע אם VS אוכף את זה.

מותר ב-C99 אבל הקומפיילר של MS לא תומך בC99 ומי שרוצה פיצ'רים של C99 שקיימים כבר ב++C שייבנה את התכנית שלו כ++C או שיתאים את הקוד לC89

פורסם

זוועה.

נראה שרק בVS2013 סוף-סוף MS מוסיפים תמיכה לC99. :)

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים