בעייה בהידור(בעזרת GCC) קוד CPP

בעייה בהידור(בעזרת GCC) קוד CPP

שלום,אני עובד אם מערכת ההםעלה מיסוג "לינוקס" (Linux) ומשתמש במהדר מיסוג GCC,כשאני מהדר את הקוד הבאה אני מקבל מיספר שגיאות:
# include <stdio.h> void main(void) { cout << "C++ Programming"; }​
ואני מקבל את השגיאות הבאות:
2.cpp:4: error: `main' must return `int' 2.cpp: In function `int main(...)': 2.cpp:5: error: `cout' undeclared (first use this function) 2.cpp:5: error: (Each undeclared identifier is reported only once for each function it appears in.) 2.cpp:6:2: warning: no newline at end of file​
גאני חייב להגיד שאת הקוד הזה לקחתי מהספר "C++ בקלות",עמוד 34 (יצירת התוכנית הראשונה) בהוצאת הוד עמי (מאוד מתסכל כבר בתוכנית הראשונה היכשל) אני גם רוצה להגיד שלא מצאתי את הקובץ iostream.h תחת /usr/include/c++/3.3.2 תודה!
 

the new L

New member
יש לך כמה טעויות

ראשית כל, הפונקציה main חייבת להחזיר int, כלומר להיות מוגדרת כך:
int main()​
בנוסף לכך עליך להשתמש בקובץ ה include iostream. כל התוכנית תראה כך:
#include < iostream > int main() { std::cout << "C++ Programming" << std::endl; return 0; }​
 

DadleFish

New member
לספר שלך יש יותר טעויות משורות קוד

הספר פשוט לא סטנדרטי. הסטנדרט של ++C (ושל C לצורך העניין) קובע שפונקציית main - הפונקציה הראשית - חייבת להחזיר int, והיא יכולה לקבל 0 פרמטרים או 2 פרמטרים שמציינים את מספר הפרמטרים שקיבלה התוכנית ואת הפרמטרים עצמם. שנית, כדי להשתמש ב-cout עליך להכיל את הקובץ iostream ולא iostream.h או stdio.h. קובץ ה-iostream.h אינו סטנדרטי. בנוסף עליך לכתוב ";using namespace std" אחרי ה-include הנ"ל, או לחילופין להחליף את cout ב-std::cout. שלישית, אולי כדאי שתעבור לספר נכון, כמו ++Thinking in C של Bruce Eckel, אותו ניתן לאתר ברשת בחינם.
 
ממ...

אבל כתוב שהספר צריך לעבוד ב UNIX - זה לא צריך להיות אותו דבר
דבר שני - אם הספר נימצא ברשת,תוכל להפנות אותי אליו?
 

DecayCell

New member
ככה זה עם ספרי תכנות בעברית

ההצהרה שאסור להשתמש בספרי תכנות בעברית אמורה להיות בגדר אקסיומה, לאור מצבם הרעוע... את הספר אפשר להשיג כאן: http://www.bruceeckel.com/
 

DadleFish

New member
אם כתוב שהספר צריך לעבוד ב-UNIX

הייתי מחזיר אותו לחנות ותובע את כספי בחזרה - זה פשוט שקר גס. אני לא מכיר אף קומפיילר תחת UNIX שמקמפל את הקוד הנ"ל.
 
תוכל להסביר לי למה הוא לא עובד?

בלינוקס?כלומר מה ההבדל?C++ בחלונות זה אותו קוד ב linux.
 

DadleFish

New member
הסברתי לך בהודעה הראשונה שלי.

פשוט CL (הקומפיילר שרץ תחת Visual Studio) הוא לא 100% לפי הסטנדרט, וגם לא ממש קרוב לזה, ו-$M עשו הרבה "הנחות" והמצאות משלהם. הקוד שרץ תחת VC הוא לא בהכרח קוד סטנדרטי. תחת UNIX - תחת GCC ליתר דיוק - הקוד הזה לא יתקמפל, כי הוא לא קוד סטנדרטי.
 
מי קבע את הסטנדרט הזה?

כלומר למשל בפיתוח אתרים אירגון שניקרא w3 אחראי,האם גם ל C יש דבר כזה? האם אי אפשר לעשות למיקרוסופט כלום נגד הדבר הזה? (תביעה לדוגמא)
 

DadleFish

New member
את הסטנדרט של ++C

קבעה ועדה שנקבעה על ידי ANSI/ISO (ארגון התקנים הבינלאומי/ארגון התקנים האמריקאי). היו (ועדיין יש) בה כל מיני חברים מכל מיני בעלי עניין ומומחים בתחום, כולל bjarne stroustrup שהמציא את השפה מלכתחילה. גם ל-C יש ועדה דומה. אין מה לעשות למיקרוסופט. אין להם שום חובה להיות תואמים לסטנדרט. זה אינטרס שלהם - כי ככה יותר אנשים ירצו להשתמש בקומפיילר שלהם; הבעיה היא שאנשים משתמשים בקומפיילר שלהם ממילא, ולכן הם עוד עושים דברים בלתי סטנדרטיים כדי שהקוד שלך יהיה בעייתי כשתרצה לעבור למערכות הפעלה אחרות. למען האמת, אין היום שום קומפיילר שתומך ב-100 אחוז בסטנדרט. יש כאלו שמתקרבים, אבל אף קומפיילר לא תומך לגמרי.
 
איך יודעים אם קוד מיתימר להיות תקין

אני רוצה לתכנן תוכנות שירוצו על מיגוון פלטפורמות,כלומר Windows & Linux,זואת אומרת שאם אני משחרר את הקוד מקור אנשים יוכלו להדר את הקוד גם על Linux וגם על Win,כלומר שימוש באותם קיבצי .h (כמו שהקובץ stdio.h עובד לי גם על חלונות וגם על לינוקס),ועוד שאלה,איך אני יודע איזה ספריות קיימות לי במהדר GCC?
 

vinney

Well-known member
תאימות פלטפורמות

אתה יכול להשיג את התאימות בשתי דרכים: - להודיע על מהדר אחד שקיים בכל הפלטפורמות שעליו בדקת את הקוד שלך והוא נתמך (למשל GCC). - להשתמש אך ורק בסטנדרט. לגבי GCC לחלונות - לא הרבה משתמשים בו לגבי הסטנדרט (השיטה העדיפה בעיניי), זה קצת טריקי אבל בהחלט אפשרי. מנסיון שלי (עשיתי מס' אפליקציות שרצות הן על מס' פלטפורמות UNIX והן בחלונות), אם אתה נצמד לSTL ופונקציות ANSI-C, וכל השאר נמצא עם קוד מקור בתוך האפליקציה שלך, הכל יהיה בסדר. בMSDN כתוב לכל פונקציה אם היא תואמת ANSI או לא, כך גם בMAN של UNIX. כמובן לכתוב יישום חלונאי יהיה קצת קשה, אבל אם תשתמש בX (ויש ספריות לקוח X גם לחלונות), אתה יכול להתגבר אפילו על זה.
 

scalla

New member
אני קראתי פעם בMSDN איך אפשר

להשתמש בPOSIX בחלונות (בVS6). מסתבר יש אפשרות כזאת.
 

YLEE

New member
הערה לגזר - תקשיב רגע.

אני לא מתכנת או משהו כזה - ואפילו אני הבנתי ש... 2.cpp:4: error: `main' must return `int' 2.cpp: In function `int main(...)': כתוב פה!!! צריך להחזיר מספר!!! 2.cpp:5: error: `cout' undeclared (first use this function) 2.cpp:5: error: (Each undeclared identifier is reported only once for each function it appears in.) 2.cpp:6:2: warning: no newline at end of file כל השאר - כנראה שקובץ ה include לא מזוהה ולכן יש בעייה בפונקציה. והכי הרג אותי "no newline at end of file" - בוא ננחש מה הבעייה פה... קיצור - תקשיב קצת למהדר שלך - הוא מנסה לומר לך משהו. אפילו אני הבנתי את זה.
 
טוב....

נתחיל בזה שכתבתי שזה באמת הקוד הראשון שלי ב C++,וביכלל בתיכנות (חוץ מתיכנות בסביבת אינטרנט,שם יש לי המון נסיון). דבר שני, אין לי מושג מזה Main,Int (אני חושב ש int זה מספר) ככה שלא ידעתי מה הוא רוצה לחזיר ומה לקבל. בקשר ל include,אם הוא היה כותב באופן ברור יותר (לדוגמא: I can't find the include) הייתי מבין. בקשר לשלישי,מה זאות אומרת?
ואגב,תודה שאתה ממש נחמד אלי,אני רק מבקש שתחזיר את עצמך לזמנים האלו שגם אתה למדתה בהתחלה איזו שהיא שפת תיכנות ולא ידעתה מה רוצים מימך,ואולי גם תפסיק להיתנשאות על אחרים,יום אחד זה יכול לחזור אליך בבומראנג וליפגוע לך ישר בין הביצ*ם.
 

YLEE

New member
../images/Emo9.gif אז אתה חושב שיש לי בי&)&*^ם...

תודה. לא מתנשא - רק תנסה להיות קשוב יותר להודעות שאתה מקבל... כשאני הייתי בגילך המחשב היה קורא לי אינווליד! היום הוא פשוט מסביר לך - "דוקטור! כואב לי פה"... בהצלחה.
 

YLEE

New member
ועכשיו כשאני חושב על זה...

אולי כשתגיע לפוינטרים - או אם תתחיל ללמוד vcpp... תקרא לי? אני רוצה ללמוד עם מישהו את השפות הללו...(יותר טוב ביחד...)
 

vinney

Well-known member
../images/Emo13.gif זאת הייתה שאלה רטורית

פשוט, בן אדם כבר באמצע לימוד CPP, ואתה אומר לו שיקרא לך כשיתחיל...
 
למעלה