PDA

View Full Version : مشکل در نوشتن هدر فایل



drstrike
چهارشنبه 06 مرداد 1389, 12:54 عصر
سلام...

تو هدر فایل یه شرط گذاشتم که اگه ارگومان بیشتر از 5 باشه برنامه رو کامپایل نکنه
ولی چه ارگومان رو بیشتر از 5 و چه کمتر از 5 می زارم برنامه رو کامپایل نمی کنه!؟

کد هر فایل:

#include <iostream.h>
#define MAX 5
int item=0;

#if MAX<item
#error item is large.
#endif

void fitem(int it)
{
item=it;
}

void print()
{
cout<<item<<endl;
}


کد برنامه:

#include <iostream.h>
#include "test.h"
int main()
{
clrscr();
fitem(7);
print();
getch();
return 0;
}

PC2st
چهارشنبه 06 مرداد 1389, 13:33 عصر
item یک متغیر است و جزء مواردی نیست که در زمان compile بتوان از آن استفاده کرد.

drstrike
چهارشنبه 06 مرداد 1389, 23:00 عصر
چطوری می تونم این مقدار رو کنترل کنم؟ شدنیه؟

میشه کد رو اصلاح کنید.
ممنون

PC2st
چهارشنبه 06 مرداد 1389, 23:10 عصر
شما نمی‌توانید توسط مقداردهی یک متغیر، از کامپایل شدن قطعه‌ای از کدها جلوگیری کنید.
چون متغیر و مقادیر آنها مربوط به run-time و دستوراتی که با # آغاز می‌شوند، مربوط به compile-time هستند.
همواره compile-time صورت می‌گیرد و وقتی که کاملا تمام شد، نوبت run-time است.
اما شما می‌خواهید این پروسه را جابجا کنید و اول run-time انجام شود، سپس compile-time که کاملا با منطق این زبان در تضاد است.

شما برای چه منظوری می‌خواستید این کار را انجام دهید؟ مطمئناً روش مناسبی برای هدف مورد نظر شما وجود دارد. اگر لازم است، بیشتر توضیح دهید.

drstrike
پنج شنبه 07 مرداد 1389, 12:12 عصر
شما نمی‌توانید توسط مقداردهی یک متغیر، از کامپایل شدن قطعه‌ای از کدها جلوگیری کنید.

درست، ولی تو یه هدر فایل دیدم که از تابع defined استفاده کرده بود که متغیر می گرفت.
تو تعریف define# هم میشه متغیر داد بهش؛ یعنی:

#include <iostream>
#define PI 3.14
#define s(r) (r * r * PI)
int main()
{
float r;
cin>>r;
cout<<s(r);
return 0;
}




شما برای چه منظوری می‌خواستید این کار را انجام دهید؟

راستش کار خاصی نمی خوام انجام بدم! فقط #error رو دیدم، سوال برام پیش اومد که چطوری با یه شرط کنترلش کنم؟(تو چند تا کتاب هم نگاه کردم فقط گفته بود #error واسه چی استفاده می شه)

PC2st
پنج شنبه 07 مرداد 1389, 12:27 عصر
درست، ولی تو یه هدر فایل دیدم که از تابع defined استفاده کرده بود که متغیر می گرفت.
در اینجا از define برای تعیین یک مقدار ثابت در compile-time استفاده می‌شود و نمی‌توان در زمان اجرای برنامه (run-time) مقدار آن را تغییر داد. آنها را همچون ثوابت در نظر بگیرید (هر چند که در هنگام کامپایل می‌توانید برای آنها مقدار تعیین کنید ولی در زمان اجرا (run-time) نمی‌شود).