עבור לתוכן

בעיה ב- Dev-CPP

Featured Replies

פורסם

שלום, התחלתי השנה ללמוד מדעי מחשב וחיפשתי קומפיילר טוב יותר מה-turbo-c משנת 70 שאנחנו מתכנתים איתו בבי"ס. לפי מה שהבנתי אפשר גם לקמפל עם תוכנות ל-CPP וראיתי שהרבה אנשים ממליצים על dev-c++. אז הורדתי וניסיתי לעשות תוכנת Hello.c פשוט:

#include <stdio.h>

#include <conio.h>

void main()

{

clrscr();

printf("Hello, my name is Dan/n");

}

עשיתי compile וקיבלתי את השגיאה הזאת:

In function 'main':

[warning] return type of 'main' is not 'int'.

[linked error] undefined reference 'clscr'

בבקשה תגידו לי מה הבעיה

פורסם

main הוא int, ולא void. לכן צריך לכתוב main int, ולהחזיר ערך (0 בהצלחה) בסוף התכנית (return 0).

השני זה די ברור. לא קיימת פונקציה העונה על השם clrscr בספריה הסטנדרטית של C, אז שלא יעבדו עליך!

פורסם

main הוא int, ולא void. לכן צריך לכתוב main int, ולהחזיר ערך (0 בהצלחה) בסוף התכנית (return 0).

השני זה די ברור. לא קיימת פונקציה העונה על השם clrscr בספריה הסטנדרטית של C, אז שלא יעבדו עליך!

דווקא הוא עשה את זה נכון. תתפלא אבל יש ספרים שהקוד שכתוב שם הוא עם פונקצית main שלא מחזירה ערך. כמו כן, הפונקציה clrscr אכן קיימת, אך היא לא נמצאת בdev-Cpp אלא ב-TClite. זאת אומרת, לכל מהדר יש פונקציות יחודיות לו. למשל בdev-Cpp יש פונקציות שונות להשתמש בגרפיקה של OpenGL מאלו של visual C++.

פורסם

ANSI-C שהיא הגירסה הרשמית של C מחייבת את main להיות מסוג int

זה שכל מיני ספרים כותבים כל מיני שטויות לא משנה את התקן.

הסיבה ש-void יפעל בחלק מהמקרים היא שאתה פשוט עובד על קומפיילר של C++ שתומך ב-main מסוג void.

קומפיילר אמיתי של C לא יאפשר main מסוג void.

דרך אגב עוד כמה דברים שאי אפשר/אסור לעשות ב-ANSI-C ומותר לעשות ב-C++

1. משתנים אפשר להגדיר רק בראש בלוק, כלומר אתה לא יכול לעשות

int main() {

int i;

scanf("%d",&i);

int j;

....

}

2. אתה לא יכול להגדיר משתנה בתוך פקודת ה-for. הפקודה הבאה פשוט לא חוקית.

for(int i=0;i<N;i++)

3. malloc לא מחזיר void* שיש להמיר עם cast לטיפוס המתאים, ב-ANSI-C לא קיים void* ולא צריך להמיר את הערך ש-malloc מחזיר.

פורסם

נכון.

ב3 התכוונת להגיד ש void* כן קיים בANSI, ולא ההפך...

דרך אגב, את שלושת הדברים שהבאת מאשר תקן C99... אבל אני אישית מעדיף להצמד לANSI בכל מקרה.

C99

http://www.kuro5hin.org/?op=displaystory;sid=2001/2/23/194544/139

ארכיון

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

דיונים חדשים