לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #2  
ישן 17-05-2011, 13:37
  שימיadmin שימי אינו מחובר  
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
 
חבר מתאריך: 25.10.01
הודעות: 42,775
בתגובה להודעה מספר 1 שנכתבה על ידי edensi שמתחילה ב "סביבת פיתוח בC"

כעקרון ++C זו "הרחבה" של C, ולכן כל סביבת פיתוח שאפשר לכתוב בה ++C, תתאים גם ל C...

כעקרון כדי לכתוב קוד C נכון (שלא כמו הגירסא של מיקרוסופט ל C/C++...) - רצוי להשתמש בקומפיילר שלא נכתב על ידי מתכנתים מהעיר רדמונד... למשל יש את ++Dev C שזה IDE שמגיע עם הקומפיילר gcc המוכר מלינוקס. פלוסים בשימוש בו: הודעות שגיאה שאשכרה אומרות מה הבעייה...

מצד שני, קוד שנכתב בסביבה הנ"ל, סביר שיעבוד על כל מע"ה בעולם (למעט אם נעשו אינקלודים של ספריות שהן windows-specific) - אך יעשה בעיות אם מישהו יחליט לקמפל בקומפיילר של מיקרוספט, ששובר דוגמאות קוד C שכתובות בספר שחיברו היוצרים של השפה... אפילו בדברים טרוויאליים כמו fopen וקריאה מקובץ...

(וכמובן להפך, קוד שנכתב "The Microsoft Way", סביר שיתקמפל רק ב VS וכו'...)
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה
נמאס לכם לזכור סיסמאות? לחצו כאן!

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #7  
ישן 19-05-2011, 11:53
צלמית המשתמש של Narxx
  משתמש זכר Narxx Narxx אינו מחובר  
 
חבר מתאריך: 21.12.04
הודעות: 30,021
בתגובה להודעה מספר 6 שנכתבה על ידי Benjamin Willard שמתחילה ב "1. שתי הסביבות ששי הציע..."

ציטוט:
במקור נכתב על ידי Benjamin Willard
1. שתי הסביבות ששי הציע מעולות, ועדיפות לסטודנט לדעתי.

2. VS 2010( וגם 2008) תומך תמיכה מלאה בC בהתאם לסטנדרט.
הסבר איך לקמפל בVS2010
וידאו קצת דבילי שמסביר

VS2010 תומך בצורה מלאה בC90 (זו גם הגרסה הכי גבוה שGCC תומך בה במלואה) עם כמה פיצ'רים מC99.
שים לב לזה .
ושים לב שיש מספר הרחבות לשפה שתכלס שנעזרות בקומפיילר במקום בMACROS שלא תואמות לקומפיילרים אחרים, כתוב עליהן בMSDN שהן Microsoft Specific, דיי פשוט ועדיף להמנע מהן.

קשה לי להגיד על VS2008 שהוא עובד בתמיכה מלאה לסטנדרט.
בדקתי תרגילים של סטודנטים בשנקר שכתבו על הדבר הזה, והרבה מאוד קוד שעבד ב VS פשוט לא התקמפל (שלא לדבר על לא רץ) ב GCC.
משום מה יש למיקרוסופט נטיה לדחוף את הפונקציות היחודיות שלהם בכל מקום.
נגיד, אם אני משתמש ב fgets אז הוא זורק לי warning שזו פונקציה 'לא טובה' וכי עלי להשתמש ב fgets_s (שזו פונקציה שהם המציאו ולא קיימת בסטנדרט).
_____________________________________
בברכה, מתן.
www.MatanNarkiss.com

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #12  
ישן 19-05-2011, 14:11
צלמית המשתמש של Benjamin Willard
  משתמש זכר Benjamin Willard Benjamin Willard אינו מחובר  
 
חבר מתאריך: 25.04.11
הודעות: 9,931
בתגובה להודעה מספר 10 שנכתבה על ידי שימי שמתחילה ב "[QUOTE=The_Equivocator]מה..."

לייצן.
מהטיוטה של C89 :
קוד:
4.9.5.3 The fopen function Synopsis #include <stdio.h> FILE *fopen(const char *filename, const char *mode); Description The fopen function opens the file whose name is the string pointed to by filename , and associates a stream with it. The argument mode points to a string beginning with one of the following sequences:/103/ "r" open text file for reading "w" truncate to zero length or create text file for writing "a" append; open or create text file for writing at end-of-file "rb" open binary file for reading "wb" truncate to zero length or create binary file for writing "ab" append; open or create binary file for writing at end-of-file "r+" open text file for update (reading and writing) "w+" truncate to zero length or create text file for update "a+" append; open or create text file for update, writing at end-of-file "r+b" or "rb+" open binary file for update (reading and writing) "w+b" or "wb+" truncate to zero length or create binary file for update "a+b" or "ab+" append; open or create binary file for update, writing at end-of-file Opening a file with read mode ('r' as the first character in the mode argument) fails if the file does not exist or cannot be read. Opening a file with append mode ('a' as the first character in the mode argument) causes all subsequent writes to the file to be forced to the then current end-of-file, regardless of intervening calls to the fseek function. In some implementations, opening a binary file with append mode ('b' as the second or third character in the mode argument) may initially position the file position indicator for the stream beyond the last data written, because of null character padding. When a file is opened with update mode ('+' as the second or third character in the mode argument), both input and output may be performed on the associated stream. However, output may not be directly followed by input without an intervening call to the fflush function or to a file positioning function ( fseek , fsetpos , or rewind ), and input may not be directly followed by output without an intervening call to a file positioning function, unless the input operation encounters end-of-file. Opening a file with update mode may open or create a binary stream in some implementations. When opened, a stream is fully buffered if and only if it can be determined not to refer to an interactive device. The error and end-of-file indicators for the stream are cleared. Returns The fopen function returns a pointer to the object controlling the stream. If the open operation fails, fopen returns a null pointer. Forward references: file positioning functions ($4.9.9).


התיעוד של לינוקס:
http://linux.die.net/man/3/fopen
שים לב לפיסקה שאחרי רשימת הדגלים (ופעם הבאה תשתדל לקרוא את כל הMan Page)

ופה:
http://www.cplusplus.com/reference/...y/cstdio/fopen/

כן במיקרוסופט ובPOSIX מתייחסים בצורה שונה לקבצים בינאריים ולקבצי טקסט, זה קיים בעוד מקומות, ואין לי מושג למה... אבל זה המצב.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #13  
ישן 20-05-2011, 10:25
  שימיadmin שימי אינו מחובר  
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
 
חבר מתאריך: 25.10.01
הודעות: 42,775
בתגובה להודעה מספר 12 שנכתבה על ידי Benjamin Willard שמתחילה ב "לייצן. מהטיוטה של C89..."

מה, רק טיוטה? לא יכולת להשקיע ולהביא מהסטנדרט עצמו?

אכן פספסתי את הפיסקה ההיא, שמשום מה תוכנה לא הופיע בתוך רשימת ה MODE-ים. אז כן, הם טוענים שיש דבר כזה b, ושהמערכת (כל מערכת POSIX) מתעלמת ממנו. מה שהגיוני, אין שום סיבה לא להתעלם. השאלה היא האם הספסיפקציה טוענת שכשאתה מבצע פעולת fread על fd פתוח (שזו הפעולה שדיברתי עליה) ללא b ב-MODE, אמור לקרות מה שקורה אצל מיקרוסופט. לנוחותך אצרף את ה man page של fread כדי שתוכל לקרוא את הגדרת הפונקציה בתור התחלה; אם תוכל להראות לי איפה בפונקציה הזו כתוב שתוך כדי העתקת בתים, מותר לשבש את המידע הנקרא, אני באמת אשמח...
קוד:
FREAD(3) Linux Programmer's Manual FREAD(3) NAME fread, fwrite - binary stream input/output SYNOPSIS #include <stdio.h> size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream); DESCRIPTION The function fread() reads nmemb elements of data, each size bytes long, from the stream pointed to by stream, storing them at the location given by ptr. The function fwrite() writes nmemb elements of data, each size bytes long, to the stream pointed to by stream, obtaining them from the location given by ptr. For nonlocking counterparts, see unlocked_stdio(3). RETURN VALUE fread() and fwrite() return the number of items successfully read or written (i.e., not the number of characters). If an error occurs, or the end-of-file is reached, the return value is a short item count (or zero). fread() does not distinguish between end-of-file and error, and callers must use feof(3) and ferror(3) to determine which occurred. CONFORMING TO C89, POSIX.1-2001. SEE ALSO read(2), write(2), feof(3), ferror(3), unlocked_stdio(3) COLOPHON This page is part of release 3.28 of the Linux man-pages project. A description of the project, and information about reporting bugs, can be found at http://www.kernel.org/doc/man-pages/. GNU 1996-05-17 FREAD(3)


בכל אופן הטענה המקורית (אם לא ניתפס לקטנות): קוד שעובד בצורה תקינה בקומפיילר לא-מיקרוסופטי כלשהוא, לא בהכרח יעבוד כמו שצריך ב VS, ולהפך. לא צריך לעשות סיפור גדול ולהיתפס לקטנות על למה ואיך, אלא רק להיות מודעים לנקודה הזו. והדוגמאות שהביאו למטה על scanf/gets וחבריהם, הן גם דוגמאות מצויינות לכך. כמו גם דברים שהם פשוט לא חוקיים כמו להגדיר void main, שכמובן מיקרוסופט מאפשרת... ויכולים בהחלט לגרום לבעיות מול המע"ה.
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה
נמאס לכם לזכור סיסמאות? לחצו כאן!

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #19  
ישן 20-05-2011, 03:02
צלמית המשתמש של Narxx
  משתמש זכר Narxx Narxx אינו מחובר  
 
חבר מתאריך: 21.12.04
הודעות: 30,021
בתגובה להודעה מספר 18 שנכתבה על ידי Benjamin Willard שמתחילה ב "אתה טועה, אין פונקציה כזאת..."

עבר זמן, אני לא זוכר במדויק, אבל אני כן זוכר שהם שינו מלא פונקציות בלי קשר בכלל לסטנדרט.
בכל מקרה, גם אם יש סיבה מוצדקת לשנות את gets, זה חלק משפה. לא לאפשר להשתמש בפונקציה הזו במערכת שלהם (ברמה של לא מצליח לקמפל, גם אם אני מתעקש [ואת זה אני אומר בזהירות כי לא ניסיתי אישית, אלו היו טענות של סטודנטים]) זה גרוע.
מה עם scanf ו- scanf_s?
האם גם scanf היא deprecated ב C99?
ממה שבדקתי - היא בהחלט חלק מהסטנדרט C99.
כמו גם fscanf ו- sscanf.
קיצר, כיוון שמיקרוסופט החליטו לשנות את השמות של הפונקציות (ומן הסתם את המימוש ודרך השימוש בהן), ו"להמליץ בחום" על השימוש בפונקציות שלהם ולא בפונקציות הסטנדרטיות, אפשר להגיד שמדובר בשפות שונות, ואם מישהו רוצה לכתוב קוד שאשכרה יתקמפל בכל מקום (ולא רק ב VS), כדאי מאוד *לא* לנסות לפתח ב VS בפרט ובשפות מיקרוסופטיות בכלל.

דעתי.
_____________________________________
בברכה, מתן.
www.MatanNarkiss.com

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #20  
ישן 20-05-2011, 03:49
צלמית המשתמש של Benjamin Willard
  משתמש זכר Benjamin Willard Benjamin Willard אינו מחובר  
 
חבר מתאריך: 25.04.11
הודעות: 9,931
בתגובה להודעה מספר 19 שנכתבה על ידי Narxx שמתחילה ב "עבר זמן, אני לא זוכר במדויק,..."

כל קוד C90 אמור להתקמפל בVS2010. כולל scanf וכולל gets . אם הוא באמת Depracated (לפי ועדת הסטנדרטים) או לפי מיקרוסופט הוא יתן אזהרה, ויציע לך להשתמש בגרסה בטוחה יותר (לפעמים Microsoft specific)
לפרטים על כל ה s_ אתה מוזמן לעיין פה http://msdn.microsoft.com/en-us/library/8ef0s5kh(v=vs.80).aspx
חוץ מזה מצויין בצורה מפורשת בMSDN איזה פונקציה תואמת לANSI

אותו כנ"ל גם לגבי Scanf .

תראה אישית, אני חושב שמה שהם עשו מצד אחד טוב, מצד שני נעשה בצורה לא נכונה. כל התוספות האלה טובות ומוסיפות לבטיחות של הקוד וחלק מהן גם הגיעו לסטנדרט, והם ממש לא הקומפיילר היחיד שמוסיף תוספות לשפת C (אההם SUN, אההם IBM ). מה שהם עשו לא נכון לדעתי, זה לזרוק את כל הדברים האלה ל stdio.h . לדעתי הם היו צריכים לשים את כל זה ב header נפרד, בישביל להדגיש את ההבדל...

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

שוב, אני גם חושב שזאת סביבה ממש לא מתאימה לסטודנטים שרוצים לפתח בC, אבל אין שום בעיה לכתוב בVS קוד C בישביל פרויקטים אמיתיים, רק צריך לדעת טוב מאוד מה אתה עושה, ואשכרה לקרוא את התיעוד...

ועכשיו אני מאחר לרכבת :\

נערך לאחרונה ע"י Benjamin Willard בתאריך 20-05-2011 בשעה 03:52.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #21  
ישן 20-05-2011, 04:26
צלמית המשתמש של Narxx
  משתמש זכר Narxx Narxx אינו מחובר  
 
חבר מתאריך: 21.12.04
הודעות: 30,021
בתגובה להודעה מספר 20 שנכתבה על ידי Benjamin Willard שמתחילה ב "כל קוד C90 אמור להתקמפל..."

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

VS זה רק כלי כדי לכתוב ולהריץ קוד. מה שבאמת משנה זה מי כותב אותו ואיך כותב אותו.
אגב, אני מאוד לא אוהב את השיטה של VS בכל הדרך שבה הוא פותח תיקיות וקבצים מיותרים בפרוייקטים חדשים.
בשביל hello world אני עובר תלאות עולם.
ל DEV יש את הכוח מצד אחד ליצור פרוייקטים כמו ב VS, ואת הקלות והנוחות שבהרצת קבצים פשוטים ובודדים ללא צורך בפרוייקט שלם שיעטוף אותם...
_____________________________________
בברכה, מתן.
www.MatanNarkiss.com

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #31  
ישן 19-05-2011, 11:51
צלמית המשתמש של Narxx
  משתמש זכר Narxx Narxx אינו מחובר  
 
חבר מתאריך: 21.12.04
הודעות: 30,021
בתגובה להודעה מספר 1 שנכתבה על ידי edensi שמתחילה ב "סביבת פיתוח בC"

מצטרף להמלצות של שימי ושי ל Dev CPP.
ה IDE היחיד שעבדתי איתו במהלך הלימודים להנדסת תוכנה (בשפות C / CPP) והוא מצויין.
קל מאוד (מבחינת משקל בדיסק וזיכרון), עובד בכל גרסאות חלונות, חינמי.

רק קח בחשבון שכשאתה לומד לכתוב ב C, לא תמיד מה שאתה כותב על חלונות ירוץ חלק בלינוקס.
לפעמים ישנם הבדלים עקרוניים בין מערכות ההפעלה (כמו אופן ניהול זיכרון) כך שלעיתים קוד לא טוב שכן ירוץ לך בחלונות (גם אם עבר קימפול ב GCC שזה המהדר של לינוקס), יתכן שזה לא ירוץ טוב בלינוקס.
צריך לשים לב לכתיבה.
גם אופן הטיפול בקבצים והרשאות הוא שונה בין מערכות ההפעלה, אבל את הבסיס בהחלט כדאי ללמוד דרך GCC (שמגיע, כפי ששימי אמר, בתור מהדר ברירת המחדל ב DEV CPP).

בהצלחה!
_____________________________________
בברכה, מתן.
www.MatanNarkiss.com

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #32  
ישן 20-05-2011, 10:34
  שימיadmin שימי אינו מחובר  
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
 
חבר מתאריך: 25.10.01
הודעות: 42,775
בתגובה להודעה מספר 31 שנכתבה על ידי Narxx שמתחילה ב "מצטרף להמלצות של שימי ושי ל..."

ציטוט:
במקור נכתב על ידי Narxx
לפעמים ישנם הבדלים עקרוניים בין מערכות ההפעלה (כמו אופן ניהול זיכרון) כך שלעיתים קוד לא טוב שכן ירוץ לך בחלונות (גם אם עבר קימפול ב GCC שזה המהדר של לינוקס), יתכן שזה לא ירוץ טוב בלינוקס.

זה גם יכול לקרות הפוך (עף בחלונות, רץ בלינוקס). שלא לדבר על הבדלים בין "נופל ב 32 ביט אבל לא ב 64", או "נותן תוצאות נכונות ב 32 אבל לא ב 64", וכו'. לא כדאי להיכנס לנושא הזה. קוד תקין שאין בו כתיבות למקומות בזיכרון שלא אמורים לכתוב אליהם, ושלא מניח בצורה שגוייה שמשתנה מסוג מסויים הוא בהכרח באורך מסויים רק כי זה ככה על המחשב של המפתח, יעבוד בשתי המערכות (בהנחה שלא מעורב קומפיילר מיקרוסופטי, כאמור...)...
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה
נמאס לכם לזכור סיסמאות? לחצו כאן!

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 12:51

הדף נוצר ב 0.11 שניות עם 10 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר