PDA

View Full Version : سوال: ایجاد آرایه، متغیر، حلقه، تعریف تابع و اینکلود کردن فایل توی PHP و C تا چه حد شبیه به هم هست؟



idocsidocs
چهارشنبه 17 اسفند 1390, 18:42 عصر
من می خوام زبان C رو یاد بگیرم. لطفا در این موارد توضیح بدید:

ایجاد آرایه، متغیر، حلقه، تعریف تابع و اینکلود کردن فایل توی PHP و C تا چه حد شبیه به هم هست؟

MMSHFE
چهارشنبه 17 اسفند 1390, 18:56 عصر
مهمترین عامل تفاوت Syntax زبانهای C و PHP در اینه که PHP به نوع متغیر حساس نیست ولی C هست. درنتیجه در تعریف متغیر، آرایه، تابع (با مقدار بازگشتی یا بدون اون) تفاوتهایی در دستور زبانشون وجود داره. سایر موارد مشابه هست. بعلاوه توی C باید قبل از تعریف آرایه اندازه اون رو مشخص کنیم (حتی از یک متغیر برای تعیین اندازه نمیتونیم استفاده کنیم). برای تعریف آرایه با طول متغیر باید از تعریف پویا با استفاده از توابع malloc و... استفاده بشه.
ایجاد آرایه:


$x = array();
$x[] = 5;
$x[] = 'ali';


int x[2];
x[0] = 5;
x[1] = 7;

متغیر:


$a = 5;
$b = 'x';
$c = 'string';


int a = 5;
char b = 'x';
char* c;
strcpy(c, "string");
// requires #include <string.h> at the beginning of code

حلقه: مثل هم ولی توی C متغیرها $ ندارن.
تعریف تابع:


function test1() {
echo 'Hello';
}
function test2($x) {
echo $x;
}
function test3($x) {
$x *= 2;
return $x;
}


void test1(void) {
printf("Hello");
}
void test2(int x) {
printf(x);
}
int test2(int x) {
x *= 2;
return x;
}

اینکلود کردن فایل توی PHP و C: اصلاً شبیه هم نیست. توی PHP هرجا بخوایم میتونیم یک فایل رو ضمیمه کنیم و تمام کدهای اون در محل ضمیمه کردن، اجرا میشه اما توی C فایلهایی که ضمیمه میشن نباید شامل تابع main باشن (تابع اصلی که اجرای برنامه از اونجا شروع میشه) و فقط میتونن شامل توابع باشن و کدی رو مستقیماً اجرا نمیکنن. بعلاوه ضمیمه کردن، در ابتدای اسکریپت و با دستور پیش پردازنده include# انجام میشه و در بقیه برنامه، میتونیم از توابعی که توی فایل ضمیمه شده تعریف کردیم، استفاده کنیم.
اگه سؤالی توی C داشتین، ازطریق پیام خصوصی مطرح کنید چون مربوط به این تالار نیست. موفق باشید.

idocsidocs
چهارشنبه 17 اسفند 1390, 19:05 عصر
اگه سؤالی توی C داشتین، ازطریق پیام خصوصی مطرح کنید چون مربوط به این تالار نیست. موفق باشید. البته منظورم از این تاپک مقایسه C و PHP هست.

این موارد که گفتید تقریبا ساده هستن و با یکی دو روز کار این موارد دستم می اد، البته به شرطی که پیچیده تر از این نباشن.

بنظرم نحوه ذخیره اطلاعات (دیتابیس) توی C و PHP با هم کاملا متفاوت هستن. در این مورد چه نظری دارید؟

معادل سسشن و کوکی توی C وجود داره؟

آیا C مثل PHP دارای فریم ورکهای مختلفی هست؟

MMSHFE
چهارشنبه 17 اسفند 1390, 19:11 عصر
توی C دیتابیس اصلاً نداریم. باید خودتون بسازید. توی ویژوال C داریم ولی اونجا با SQL Server کار میشه و روش کار هم کاملاً متفاوت هست. باید Connection String بسازید و متصل شده، کوئری اجرا کنید و اتصال رو ببندید و... کلاً خیلی فرق میکنه. PHP خیلی راحتتره.
سشن و کوکی اصلاً نداریم چون C برای برنامه نویسی دسکتاپ طراحی شده نه وب. فریمورک هم تا جایی که میدونم نداره. ضمناً توی C مواردی مثل مدیریت حافظه و برنامه نویسی سیستمی و دسترسی مستقیم به سخت افزار (دور زدن سیستم عامل) و... داریم که باعث شده برنامه هایی مثل Windows و Linux و PHP و... رو بشه با C نوشت!

idocsidocs
چهارشنبه 17 اسفند 1390, 19:27 عصر
مسئله دیگه ظاهر و گرافیک برنامه هست، توی C چطور می شه ظاهر برنامه رو تعیین کرد؟ آیا از CSS , JAVASCRIPT ,HTML استفاده شده یا از روشهای دیگه؟

من می تونم بگم تا حدی PHP بلدم. با توجه به این مورد بنظرتون چقدر طول می کشه که C رو یاد بگیرم و یه برنامه ساده مثل خاموش و روشن کردن یه دستگاه و حرکت دادن دستگاه رو انجام بدم؟

MMSHFE
پنج شنبه 18 اسفند 1390, 09:24 صبح
برای ظاهر برنامه باید از توابع GUI ویندوز استفاده کنید. باید با Windows API آشنایی داشته باشین. البته اگه با C معمولی (غیر ویژوال) برنامه مینویسید، بهتره قید ظاهر گرافیکی رو بزنید و فقط برنامه کنسول (مثل محیط Command Prompt) تولید کنید. توی C دوست عزیز اصلاً HTML و... نداریم. اصلاً C برای وب نیست! البته میشه خروجی برای این کار تولید کرد و از اون برنامه با روشهای CGI و... استفاده کنیم ولی هدف اصلی C این موضوع نیست.
اگه C بلد بودین، میتونستم بگم 2 هفته ای PHP رو یاد میگیرین ولی عکسش صادق نیست. برای حرفه ای شدن در C حداقل یکی دو سال زمان لازمه. بعلاوه همون برنامه ای که شما اسمش رو ساده گذاشتین (روشن و خاموش کردن دستگاه و...) اصلاً ساده نیست و شما باید با ترکیب ASM (اسمبلی) و C و دسترسی مستقیم به پورتهای دستگاه، کار برنامه ریزی اون رو انجام بدین. حالا اگه منظورتون یک روبات هست، باید از نسخه خاصی از C بنام CodeVision استفاده کنید. البته با BasCOM (به زبان بیسیک) هم میشه و ساده تر هست ولی قدرت CodeVision بیشتره. در این زمینه خاص اگه منظورتون هست، بهتره کتاب AVR به زبان ساده آقای «علی کاهه» رو مطالعه کنید. کلاً مربوط میشه به بحث برنامه ریزی میکروکنترلر. موفق باشید.

idocsidocs
پنج شنبه 18 اسفند 1390, 10:48 صبح
برنامه ای که شما اسمش رو ساده گذاشتین (روشن و خاموش کردن دستگاه و...) اصلاً ساده نیست و شما باید با ترکیب ASM (اسمبلی) و C و دسترسی مستقیم به پورتهای دستگاه، کار برنامه ریزی اون رو انجام بدین.
اگر زبان سی به تنهایی نمی تونه یه دستگاه رو روشن و خاموش کنه، چرا انقدر ازش تعریف می کنن و می گن برای ارتباط با سخت افزار بهترین زبانه و ...؟

MMSHFE
پنج شنبه 18 اسفند 1390, 10:53 صبح
دوست عزیز، شما باید با یک زبان نزدیک به زبان ماشین مثل اسمبلی این کار رو انجام بدین. ضمناً همه کارهای مربوط به سخت افزار که در روشن و خاموش کردن خلاصه نمیشه. خیلی کارها رو خود C به تنهایی انجام میده. مثلاً میتونید با C برای اسکنر خودتون درایور بنویسید. اما بعضی جاها که نیاز به دسترسی بیشتر هست، از اسمبلی استفاده میشه که باز هم C چون اجازه ادغام کدهای ASM رو در داخل برنامه C میده، دست شما رو در این مورد هم باز میگذاره. موفق باشید.

MostafaEs3
پنج شنبه 18 اسفند 1390, 10:56 صبح
یعنی کامپیوتر ها و دستگاه های دیگه همشون بطور پیشفرض زبان C رو ساپورت میکن ؟؟ چطوری آخه ؟

MMSHFE
پنج شنبه 18 اسفند 1390, 11:11 صبح
نه عزیز، ویندوز با C نوشته شده و بعد کامپایل شده به زبان ماشین. دلیل نمیشه که C رو ساپورت کنه. دقت کنید که ویندوز قرار نیست برنامه ها رو اجرا کنه. ویندوز فقط یک واسطه هست بین برنامه ها و ماشین و درواقع این ماشین هست که برنامه ها رو اجرا میکنه و اون هم بجز صفر و یک چیزی نمیفهمه. برای سایر زبانها باید کامپایلرش رو نصب کنید و برنامه خودتون رو بعد از نوشتن به اون زبان، کامپایل کنید تا به زبان ماشین تبدیل بشه و قابلیت اجرا پیدا کنه. بعدشم چه دلیلی داره که ویندوز که با C نوشته شده، C رو بشناسه؟ C دستورات API ویندوز رو میشناسه و اجرا میکنه چون توسط خودش نوشته شدن ولی عکسش صادق نیست. مثلاً خود ماها که مخلوق خدا هستیم، زبان خدا رو میفهمیم؟ ولی خدا زبان ما رو میفهمه! (خودمونیم عجب مثالی زدم :چشمک:)

MostafaEs3
پنج شنبه 18 اسفند 1390, 11:34 صبح
:لبخند: الان مثلا ویندوز که با زبان C کدنویسی شده چطوری خودش نصب میشه ؟ منظور اینکه خود ویندوز کامپایلر نصب میکنه یا اینکه کامپایلر روی دستگاه ها موجوده ؟؟ :متفکر:

MMSHFE
دوشنبه 22 اسفند 1390, 10:24 صبح
نه عزیز، Installer ویندوز با Assembly کار میکنه که مستقیماً قابل اجرا هست. بعد از نصب ویندوز هم مدیریت فایلهای اجرایی مثل exe. و com. و... رو ویندوز بعهده میگیره. دستورات اجرای اسمبلی هم توی خود پردازنده و همچنین توی ROM (تقریباً اگه درست یادم مونده باشه، 256 کیلوبایت اول) قرار گرفته. برای همین هم هست که میبینید ویندوز روی MacBook نصب نمیشه چون اسمبلی اونها فرق میکنه و همه دستورات یک پردازنده روی یکی دیگه اجرا نمیشه. یا مثلاً کارآیی ویندوز روی پردازنده Intel بهتر از AMD هست چون دستورات Intel برای کارهایی که ویندوز میخواد، بهینه تر نوشته شدن ولی همین پردازنده AMD کارهای سه بعدی رو بهتر از Intel انجام میده چون اون دستورات روی اون بهینه تر نوشته شدن. بگذریم، از بحث اصلی منحرف نشیم. در کل، باید دقت کنید که تا وقتی سیستم عامل نصب نباشه، باید با زبان ماشین کار کنیم. مثلاً خود کامپایلر C تا قبل از اختراع ویندوز توی DOS اجرا میشد که خود DOS باز با اسمبلی و یک مشت صفر و یک نوشته شده بود. بیخیال زیاد وارد این بحثها نشین، سردرد میگیرین ها! بحث اصلی تفاوتهای C و PHP بود. بهتره به همون بپردازیم. موفق باشید.

MostafaEs3
دوشنبه 22 اسفند 1390, 12:23 عصر
خیلی ممنون از اینکه جواب دادید ... اونطور که من فهمیدم یک سیستم خام فقط Assembly ساپورت میکنه و کامپایلر هم توی ویندوز یا یک سیستم عامل دیگه باید اجرا بشه درسته ؟

MMSHFE
دوشنبه 22 اسفند 1390, 15:15 عصر
تقریباً همینطوره. البته اگه بخوایم خیلی دقیق بگیم، یک سیستم خام فقط صفر و یک میشناسه. نحوه تفسیر این صفر و یکها هم توی پردازنده با روش سیم بندی و گیتها و... و یا روش میکروپروگرامینگ یا همون ریز برنامه ریزی (توی معماری کامپیوتر خوندین دیگه) مشخص شده. درنتیجه ممکنه یک پردازنده، رشته 1011110 رو یکجور تفسیر کنه، پردازنده دیگه، یکجور دیگه. کامپایلر هم هدفش همینه که برحسب پردازنده موجود، کدهای زبان سطح بالا رو بگیره و به کد صفر و یک مخصوص همون پردازنده تبدیل کنه که به این کد که سیستم میشناسه و میتونه بدون واسطه اجراش کنه، Native Code یا زبان بومی میگیم. موفق باشید.

MostafaEs3
دوشنبه 22 اسفند 1390, 16:26 عصر
پس میشه مثلا 0 و 1 رو خودش یکنوع زبون برنامه نویسی دونست !! که باید پردازنده اینو تفسیرش کنه درسته ؟ :لبخند:

MMSHFE
دوشنبه 22 اسفند 1390, 17:05 عصر
بله. البته صفر و یک رو یک زبان برنامه نویسی نمیدونیم، واقعاً یک زبان برنامه نویسی هست. بهش هم میگن زبان ماشین. دقت کنید که اسمبلی زبان ماشین نیست، بلکه یک درجه بالاتر از زبان ماشین محسوب میشه و جزو زبانهای سطح پایین هست.