++C

Supra

New member
++C

בספר The C++ Programming Language של ביורן סטראוסטרופ (ממציא שפת סי פלוס פלוס), המחבר משתמש בסגנון תכנות שאיננו מתקמפל באף קומפיילר (בורלנד, מיקרוסופט). למשל: #include <iostream> #include <limits> int main() { std::cout<<"largest float == "<std::<numeric_limits<float>::max() <<" ,char is signed == "<<std::numeric_limits<char>is_signed<<´\n´; return 0; } אשמח לדעת למה כל התוכנית הקטנה הזו לא מתקמפלת, אסתפק אפילו בתשובות חלקיות כמו למה הוא מחסיר משמות ה- headers את הסיומת .H? למה std::cout לא מזוהה ע"י הקומפיילר?
 

ihovav

New member
הסבר :

ב ++C אין צורך להוסיף את ה "H." אחרי קובץ ה INCLUDE - וזאת בתנאי שאתה מגדיר באיזה NAMESPACE אתה משתמש - כלומר - במידה ויש קריאה לפונקציה שאינה מוגדרת בקבץ הנוכחי - באיזה קובץ INCLUDE לחפש אותה. במידה ואתה לא רוצה להגדיר לאיזה קובץ אתה מתיחס, או שאתה מתיחס לקובץ אחד ורוצה לקרוא לפונקציה מקובץ אחר - אתה משתמש ב SCOPE OPERATOR - כלומר אופרטור שייכות, זה ה "::" שבין ה IOSTREAM לבין ה COUT - וזה אומר שהפונקציה\אובייקט "COUT" שייך ומוגדר בקובץ ה IOSTREAM.H כדי להגדיר SCOPE - אתה כותב בתחילת תכנית את זה :
#INCLUDE <...> #INCLUDE <...> USING NAMESPACE *******; /* PROGRAM*/​
דוגמא ממשית :
#include <iostream> #include <example> using namespace std; void main(void) { int i = 9; cout<<i<<endl; i = example::do_something(); }​
אתה יכול לראות שהוגדר NAMESPACE - STD (שמכיל בתוכו את STDIO, STDIN, STDOUT ןכ"ו) - ולכן הקריאה ל COUT מזוהה אוטומטית ע"י המעבד - ואילו כאשר נקראת פונקציה ששייכת ל EXAMPLE - יש SCOPE OPERATOR
 

חובבן

New member
הדוגמא נכונה, אבל בילבלת

בין שני נושאים שונים. אין קשר בין השימוש ב namespace לבין השם של קובץ ב include. הראשון מטופל ע"י הקומפיילר והשני ע"י ה פרה - פרוססור. מה כן הקשר? הסטנדרט של C++98 מגדיר שימוש בקבצי STL חדשים (ללא סיומת h). בקבצים אלו גם מוגדר ה namespace std. אין שום משמעות לשם של קובץ ה include וניתן גם להגדיר קובץ כזה עם סיומת כלשהיא, או בלי סיומת כלל.
 
למעלה