ABA


"שאלה פשוטה: מה התחליף של CONST ב C ?"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #15228 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 15228
זולי 
חבר מתאריך 10.8.04
4426 הודעות
   14:52   16.03.09   
אל הפורום  
  שאלה פשוטה: מה התחליף של CONST ב C ?  
 
   ערכתי לאחרונה בתאריך 16.03.09 בשעה 14:53 בברכה, זולי
 
לדוגמה:
בC++ אם אני רוצה ליצור מערך בגודל קבוע SIZE אז

const int SIZE = 5;


איך מקובל לעשות אותו הדבר בC?
תודה..


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  קודם כל, הצורה הזו שרשמת תקינה ב-C אבל אין ldan192  16.03.09 16:15 1
     נראה לי שלא הבנת אותי... זולי  16.03.09 16:23 2
         אה אה, הבנתי אותך. תיכנותית? יותר נכון להשתמש ldan192  16.03.09 17:04 3
             תודה. הסיבה שאני שואל זה כי אמרו לי שconst לא תופס בC זולי  16.03.09 17:10 4
                 אולי בגרסאות ישנות מ-C99. עובד בדוק... ldan192  16.03.09 19:44 5
                     הבנתי. תודה רבה לך זולי  16.03.09 23:49 6
                     const קיים כבר ב C89. TTAsnn 18.03.09 17:26 7
                         הגיוני, פשוט לא יצא לי לעבוד על פורמטים ישנים ldan192  18.03.09 18:12 8
                             vs לא תומך ב C99 בצורה מלאה, אז נראה לי שכן יצא לך :) TTAsnn 20.03.09 02:18 9
                                 אתה בטח מדבר על Visual Studio 6 ששם אני מסכים ldan192  20.03.09 11:01 10
                                     גם gcc לא תומך במלואו ב C99 למען האמת TTAsnn 21.03.09 11:00 11
                                         איכס... 6 זו בושה לאנושות. לא מבין למה מלמדים את זה ldan192  21.03.09 14:06 12
                                             תן לי לנסח מחדש TTAsnn 21.03.09 21:39 13

       
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   16:15   16.03.09   
אל הפורום  
  1. קודם כל, הצורה הזו שרשמת תקינה ב-C אבל אין  
בתגובה להודעה מספר 0
 
בינה לבין מערך שום קשר. אתה מאתחל מעין משתנה גלובלי אבל שיהיה רלוונטי רק לסקופ ספציפי (כשאתה רושם בצורה הזו).

האמת היא ששפת C היא שפה נורא דינמית וכל מערך אפשר תמיד להרחיב עם הקצאות נוספות ככה שאין כזה דבר באמת קבוע,
אבל בלי קשר, int SIZE[5] = {0}; יאתחל לך מערך int בגודל 5 עם אפסים.


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
זולי 
חבר מתאריך 10.8.04
4426 הודעות
   16:23   16.03.09   
אל הפורום  
  2. נראה לי שלא הבנת אותי...  
בתגובה להודעה מספר 1
 
   ערכתי לאחרונה בתאריך 16.03.09 בשעה 16:32 בברכה, זולי
 
המערך אינו רלוונטי פה כלל...

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

בC++ הייתי קובע באותיות גדולות את שם הקבוע כשלפניו const הטיפוס. לדוגמה:

const int PIE = 3.1415926

כדי שבמקום להקליד בכל מקום בקוד 3.1415926 אקליד רק PIE.

עכשיו איך אני עושה זאת בC?..
מקובל להשתמש בdefine בשביל זה?..


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   17:04   16.03.09   
אל הפורום  
  3. אה אה, הבנתי אותך. תיכנותית? יותר נכון להשתמש  
בתגובה להודעה מספר 2
 
ב-#define אז האינטרפטר מציב את הערכים ולא הקומפיילר.

בכל מקרה, אתה יכול לרשום
int cont PIE = 3.14; וזה יעשה את מה שהתכוונת.


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
זולי 
חבר מתאריך 10.8.04
4426 הודעות
   17:10   16.03.09   
אל הפורום  
  4. תודה. הסיבה שאני שואל זה כי אמרו לי שconst לא תופס בC  
בתגובה להודעה מספר 3
 
   אתה אומר שזה עובד?..
אבל בכל מקרה אתה אומר לעשות define זה נכון?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   19:44   16.03.09   
אל הפורום  
  5. אולי בגרסאות ישנות מ-C99. עובד בדוק...  
בתגובה להודעה מספר 4
 
וכן, DEFINE זה בעצם לעשות replace בכל מקום של הטקסט בטקסט, לא שום דבר שדורש הקצאות זכרון וכד' - הרבה יותר נקי ונכון.


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
זולי 
חבר מתאריך 10.8.04
4426 הודעות
   23:49   16.03.09   
אל הפורום  
  6. הבנתי. תודה רבה לך  
בתגובה להודעה מספר 5
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
TTAsnn

   17:26   18.03.09   
אל הפורום  
  7. const קיים כבר ב C89.  
בתגובה להודעה מספר 5
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   18:12   18.03.09   
אל הפורום  
  8. הגיוני, פשוט לא יצא לי לעבוד על פורמטים ישנים  
בתגובה להודעה מספר 7
 


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
TTAsnn

   02:18   20.03.09   
אל הפורום  
  9. vs לא תומך ב C99 בצורה מלאה, אז נראה לי שכן יצא לך :)  
בתגובה להודעה מספר 8
 
   למען האמת בvs הקומפיילר הוא ל c++ עם קצת תאימות ל c, או משהו מעוות כזה. מתישהו לפני שנים רבות מיקרוסופט ויתרה על קומפיילר ל C, לך תבין אותם.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   11:01   20.03.09   
אל הפורום  
  10. אתה בטח מדבר על Visual Studio 6 ששם אני מסכים  
בתגובה להודעה מספר 9
 
זה משהו מזעזע ואני חושב שזה בושה שעדיין מלמדים את זה (זה C עם כל מיני פונקציות מ-C++, גירסא מאי-שם ב-1990).
אבל VS2005 ומעלה זה C נקי לגמרי, אי אפשר לשלב איכויות מ-C++. יכול להיות שזה לא C99 טהור, אבל ממה שלימדו אותנו לפחות לימדו לתכנת תיכנות C99 טהור, כי אחרת כשהיינו ממירים את העבודה ללינוקס ומקמפלים ב-gcc במקום 100 שורות הערות היו לנו 1000 שורות שגיאה


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
TTAsnn

   11:00   21.03.09   
אל הפורום  
  11. גם gcc לא תומך במלואו ב C99 למען האמת  
בתגובה להודעה מספר 10
 
   עד כמה שאני יודע אין שום קומפיילר שתומך ב C99 בצורה מלאה. אני אישית משתדל להמנע מקוד חדש יותר מ C89 חוץ מפונקציות ספציפיות, ואני יודע שאני לא היחיד, כי אחרת אתה לא יכול לדעת לאיזה פלטפורמה תגיע שהפונקצייה הספציפית שהשתמשת בה לא תעבוד.

בכל מקרה, לא ידוע לי הרבה על VS2005, כשאני משתמש ב VC++ אני משתמש ב 6 אבל גם מזה אני משתדל להמנע.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   14:06   21.03.09   
אל הפורום  
  12. איכס... 6 זו בושה לאנושות. לא מבין למה מלמדים את זה  
בתגובה להודעה מספר 11
 
בכלל


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
TTAsnn

   21:39   21.03.09   
אל הפורום  
  13. תן לי לנסח מחדש  
בתגובה להודעה מספר 12
 
   אני *לא* מפתח בכלל לווינדוס! אבל כשאני כן (לעיתים רחוקות) אני משתמש ב VC6, למה? סתם כי לא היה לי כח להתקין משהו אחר. אני בכל מקרה פינגווין ככה שאני נמנע מהפלטפורמה הנוראית הזו כמה שאפשר. אבל במילא, לא משנה לי כמה חרא הם ממשים את הסטנדרטים החדשים יותר וכמה הם מאפשרים כי אני במילא אוהב c89/90, חסרים כמה דברים מידי פעם, ולכן לפעמים אני לא מגביל את עצמי לסטנדרט ומרשה לעצמי להשתמש בפונקציות נפוצות שמוגדרות בסטנדרטים מאוחרים יותר, או אפילו posix אבל כאן זה נגמר.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net