پاسخ : کوچ کردن از کدویژن به AtmelStudio
این سوال دیگه مربوط به atmel studio یا کامپایلر های مختلف نمیشه و مربوط به خود زبان سی است.
اول اینکه توصیه میکنم خودتون برید کامپایل و چک کنید .
شرط این if شامل چندین شرط کوچکتر که یک ترکیب عطفی را با هم ساخته اند است. بهتر بود نوع متغییر های استفاده شده را می فرمودید. به عنوان مثال در قسمت اول temp_even باید حتما یک متغییر از نوع عدد صحیح باشد.(چون عملگر % باید حتما بین دو عملوند عدد صحیح قرار گیرد.)
شرط ها به نظر همه درست است و مشکلی هم ندارد. و بدون ارور کامپایل میشه.
ولی یک نکته مهم:
یکم دقیق تر که نگاه کنیم به یک اشتباه محلک در شرط آخر پی میبریم. یعنی شرط زیر:
(data & 0x0020==1 )
جواب این شرط همیشه false است پس در نتیجه هیچ وقت بدنه ی if اجرا نمیشود.
دلیل:
در صورتی که بیت 5 متغییر دیتا یک باشد در این صورت جای شرط عبارت زیر قرار میگیرد:
(0x0020==1 )
واین یعنی:
( 1==32 )
و این غلط است.
برای درست چک شدن این شرط باید به صورت زیر نوشته شود:
(data & 0x0020 )
بهتره بقیه را هم به همین شکل بنویسیم ولی استثناً در این مثال فقط شرط آخر مشکل ایجاد میکرد:
پس بهتره شرط را به شکل زیر بنویسید. (فرقیم نمیکنه از چه کامپایلری استفاده میکنید)
نوشته اصلی توسط aseok
اول اینکه توصیه میکنم خودتون برید کامپایل و چک کنید .
شرط این if شامل چندین شرط کوچکتر که یک ترکیب عطفی را با هم ساخته اند است. بهتر بود نوع متغییر های استفاده شده را می فرمودید. به عنوان مثال در قسمت اول temp_even باید حتما یک متغییر از نوع عدد صحیح باشد.(چون عملگر % باید حتما بین دو عملوند عدد صحیح قرار گیرد.)
شرط ها به نظر همه درست است و مشکلی هم ندارد. و بدون ارور کامپایل میشه.
ولی یک نکته مهم:
یکم دقیق تر که نگاه کنیم به یک اشتباه محلک در شرط آخر پی میبریم. یعنی شرط زیر:
(data & 0x0020==1 )
جواب این شرط همیشه false است پس در نتیجه هیچ وقت بدنه ی if اجرا نمیشود.
دلیل:
در صورتی که بیت 5 متغییر دیتا یک باشد در این صورت جای شرط عبارت زیر قرار میگیرد:
(0x0020==1 )
واین یعنی:
( 1==32 )
و این غلط است.
برای درست چک شدن این شرط باید به صورت زیر نوشته شود:
(data & 0x0020 )
بهتره بقیه را هم به همین شکل بنویسیم ولی استثناً در این مثال فقط شرط آخر مشکل ایجاد میکرد:
پس بهتره شرط را به شکل زیر بنویسید. (فرقیم نمیکنه از چه کامپایلری استفاده میکنید)
کد:
if ( (temp_even % 2) && !(data & 0x0002) && !(data & 0x0004) && !(data & 0x0008) && !(data & 0x0010) && (data & 0x0020) )
دیدگاه