Clang
236 subscribers
83 photos
3 videos
10 files
112 links
یه کانال شخصیه برای تمرین C. این کانال مثل یک دفترچه یادداشته واسه من، نه یک جایی که محتواش رو تضمین کنم برای همه
همچنین سعی کنید نکاتی که اینجا میگم رو با افراد حرفه ای به اشتراک بزارید و به چالش بکشید، من از خدامه بهتر شم.
https://t.iss.one/ccismywife
Download Telegram
تفاوت ++ یا — پیشوندی یا پسوندی(prefix or postfix)(cpp)
عملگر ++ یا Increment روی یک object هایی کار میکنه که قابل افزایش باشن، یعنی بشه روشون محاسبه انجام داد. — یا Decrement هم مثل ++ هست با این تفاوت که کم میکنه یک واحد.
حالت postfix
معمولاً توی حلقه های for در بخش updation با این مورد زیادی کار کردیم، یعنی:
for(int i = 0;i < 10;i++);

بخش ++i رو در نظر بگیر، این عملگر در مرحله اول یک کپی از مقدار i میگیره و توی عبارت فعلی قرار میده، یعنی نتیجه ارزیابی خود عبارت ++i میشه مقدر قبلی i. ولی خود i مقدارش یکی اضافه شده.
حالت prefix
این حالت رو فقط توی شرایط خاص استفاده میکنیم، گاهی میخوایم هم به i یک واحد اضافه بشه و هم مقدار عبارت به جای اینکه برابر با مقدار قبلی i باشه، مقدار فعلی i باشه!
حالا چطور میتونیم فرقشون رو حس کنیم؟
int i = 5;
int j = 6;
int z = i++ + ++j;

خب همه چیز اینجا واضحه به جز z، بیا و زیر عبارت های i++ + ++j رو به دست بیاریم. ما با ++i و j++ طرف هستیم و یک + بینشون. برای + هم باید از چپ به راست ارزیابی کنیم؛ پس:
i++
خب این بخش رو همونطور که گفتم، اول یک کپی از مقدار قبلی i میگیره و به جای i++ میزاره ولی مقدار i خودش یک واحد بهش اضافه شده! انگار کد قبلی شده:
int i = 6;
int j = 6;
int z = 5 + ++j;

پس شد چی؟ وقتی میگیم عبارت x چطور ارزیابی میشه، یعنی به جای x چی قرار میگره، حالا به جای x ما اینجا i++ رو داشتیم.
++j
خب، همونظور که گفتیم، نوع prefix باعث میشه که بدون نیاز به کپی اول یک واحد به j اضافه بشه و نتیجه عبارت هم میشه مقدار فعلی j بعد از افزایش... پس داریم:
int i = 6;
int j = 7;
int z = 5 + j;

پس نتیجه کلی میشه چی؟؟؟؟
#نکته #مبتدی
❤‍🔥2
Clang
5 + j
حالا یک #نکته #جالب که اینجا میتونیم بفهمیم، اینه که وقتی از postfix استفاده میکنیم، مقداری که تهش تولید میشه یک مقدار ثابت غیر قابل تغییر هستش، یعنی انگار یک لیترال از مقدار قبلی داریم!
ولی زمانی که از prefix استفاده میکنیم، قضیه فرق داره و انگار به خود j تو حافظه دسترسی داریم! پس کد زیر شاید عجیب باشه ولی اوکیه(توی cpp!):
int j = 3;
++j = 5;

ولی منطقی نیست! اینکارو نکن
به هر حال، انگار نوشتیم:
int j = 4;
j = 5;

البته قضیه میشه جزئی تر بررسی بشه، این رو صرفاً برای درک بهتر نوشتم، چون توی cpp عبارت x++ باعث تولید یک l-value میشه و این دلیل اصلی کار کردن کد بالاتره...
👍1
OnHex
محقق امنیتی Kevin Beaumont
چرا هر کی اسمش Kevin هستش باید محقق امنیتی باشه؟😂
👍3
یک نکته درباره عیب یابی در خواندن و نوشتن در فایل ها
برای اینکه متوجه بشیم که خطایی توی فرایند خوندن یا نوشتن در فایل رخ داده یا نه، به صورت کلی چهار حالت داریم:
1️⃣ست شدن فلگ error در FILE که توسط ferror قابل بررسی هستش
2️⃣توابعی که استفاده کردیم یک مقدار برمی‌گردونن که نشان دهنده این هستش که خطا رخ داده
3️⃣فلگ EOF در FILE ست شده باشه که نشون دهنده اینه که داریم سعی میکنیم از آخرین بایت فایل فراتر بریم و با feof قابل تست هستش
4️⃣بررسی متغییر Global به نام errno که کد آخرین خطا رو توی خودش داره(یک چی توی مایه های همون GetLastError در win32)

چیزی که ممکنه یکم گیج کننده باشه اینه که بعضی از توابع ممکنه برای نشون دادن این که خطایی رخ داده، از EOF(برای استریم های wide از ماکرو WEOF استفاده میشه) استفاده کنن؛ یعنی مقدار EOF رو برگردونن، در صورتی که به انتهای فایل نرسیدیم!
توی این حالت، برای اینکه بررسی کنیم که EOF برگشتی نشون دهنده انتهای فایله یا نشون دهنده یک خطاس، باید علاوه بر اینکه مقدار برگشتی رو بررسی کنیم، با استفاده از توابع ferror و feof بررسی کنیم که آیا خطا رخ داده یا به انتهای فایل رسیدیم واقعاً.
مثال
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fp = fopen("example.txt", "r");
if (fp == NULL)
{
perror("Error opening file");
return EXIT_FAILURE;
}
char buffer[256];
int i = 0;
char c;
while (i < sizeof(buffer) - 1 && (c = fgetc(fp)) != EOF)
{
buffer[i++] = c;
}
buffer[i] = '\0';
if (c == EOF)
{
if (feof(fp))//بررسی انتهای فایل
{
printf("End of file reached.\n");
}
else if (ferror(fp))//بررسی خطا
{
perror("Error reading file");
fclose(fp);
return EXIT_FAILURE;
}
return EXIT_FAILURE;
}
printf("%s\n", buffer);
fclose(fp);
return 0;
}

البته توی توضیحاتی که برای توابع ارائه میشه هم به این نکته ها اشاره میشه، ولی بد نیست یک دید کلی هم به این قضیه داشته باشیم.
#نکته
❤‍🔥3
Clang
errno
با استفاده از perror هم میتونید به صورتی یک آدم متوجه بشه، توی خروجی متوجه بشید که کدی که errno داره نشون دهنده چیه، errno هم توی هدر errno.h اعلان شده...
❤‍🔥3
👍5
نکاتی درباره پیش پردازنده ها
پیش پردازش یکی از فاز هایی هست که قبل از کامپایل باید انجام بشه و نتیجه اون به کامپایلر تحویل داده میشه. یعنی کدی که ما مینویسیم به صورت مستقیم به کامپایلر تحویل داده نمیشه!
با استفاده از پیش پردازنده ها میتونیم یک سورس کد رو به صورت شرطی کامپایل کنیم؛ یعنی میتونیم بگیم اگه فلان شرط true بود بیا و این بخش رو کامپایل کن و در غیر اینصورت یا بشین سر جات یا یک بخش دیگه رو کامپایل کن.
مثلاً زمانی که میخوایم کد فقط توی حالت دیباگ کامپایل بشه میتونیم از این قابلیت استفاده کنیم.

یک موردی داریم به اسم null directive که به این صورت هستش که فقط در ابتدای خط # میزاریم و بعدش یا از whitespace استفاده میکنیم یا از کامنت های تک خطی...
الاً فایده خاصی نداره، و صرفاً با یک سرچ کوچیک به این نتیجه رسیدم که دلیلش اینه.

میتونیم توسط backslash محتویات یک ماکرو رو توی چند خط بنویسیم... اینو دیگه تقریباً همه میدونید، و فقط هم مختص ماکرو ها نی... البته توی لیترال های رشته ای مهم نی....

یک سری موارد دیگه هم هه، حسش نی فعلاً...
#نکته #ناقص
❤‍🔥4
بریم ناسا رو هک کنیم...😂
ویرایش:
دیگه مثل قدیم حال نمیده....🚬
❤‍🔥8
از فردا:
C
C++
---
انگیزه محور بخواین جلو برین نتیجه اش میشه این که دو ماه اصلاً شروع نکنید. در صورتی که انگیزه توی کار میاد
❤‍🔥10
متوجه این نکته شدم که یکی از مواردی که باعث میشه نتونیم برنامه های خوبی بسازیم و مسائل رو حل کنیم اینه که هنوز اونطوری که باید روش حل مسئله بالا به پایین رو درک نکردیم، ما فکر میکنیم یک دید کلی داریم، ولی قضیه چیز دیگریست.
مثلاً این رو در نظر بگیرید:
ساخت یک ماشین حساب ساده مهندسی:
بالا به پایین:
میخوایم یک رشته بگیره که عبارت ریاضی داره و حساب میکنه و نمایش میده
مفاهیمی که باید یک لایه توشون پایین تر بریم:
1.عبارت ریاضی: چه چیزی عبارت ریاضی حساب میشه؟ توی این مثال ما اول میگیم چیزی که شامل عدد، */+- باشه که به صورت معتبری پیش هم باشن.
1.1. به صورت معتبر یعنی چی؟ همینطوری پایین میریم... 1.1....
2.حساب میکنه؟ روش محاسبه چی باشه؟ بازگشتی یا ساختار درختی؟
3.نمایش بده؟ چطور نمایش بده؟ توی فایل یا صفحه نمایش با متن یا MSGBOX?
4.چطور رشته رو میگیره؟ ورودی کنسول یا آرگومان های برنامه؟

این در حقیقت اونقدرا هم که فکر میکنیم بالا به پایین نیست و توی دید بالا به پایین، زیادی سقوط داشتیم.
در حقیقت، باید از اون بالا بالا ها با قدم های کوچیک بیایم پایین، اونطوری دیدمون نسبت به مسئله روشن تره! یعنی:
1. چه چیزی عبارت ریاضی حساب میشه؟ هر چیزی که قابل تجزیه باشه، شامل زیر عبارت باشه، قابل محاسبه باشه، و بتونه نتیجه ای ازش تولید بشه.
1.1.چطور یک عبارت قابل تجزیه میشه؟ با استفاده از قوانینی که برای جداسازی زیر عبارت هاش تعریف میکنیم.
1.2.چطور یک عبارت رو قابل محاسبه کنیم؟ در نهایت نتیجه ارزیابی این عبارت باید یک مقدار جدید تولید کنه که خود اون مقدار میتونه یک عبارت باشه
1.3.چطوری از یک عبارت نتیجه تولید کنیم؟ با تجزیه و تحلیل عبارت و زیرعبارت ها.
1.4.یک عبارت میتونه زیر عبارت باشه، توی فرایند پیاده سازی تجزیه عبارت، توکن های عبارت رو تعیین میکنیم و قواعدی دقیق برای معتبر سازی اون عبارت توی برنامه خودمون تعریف میکنیم.
2.یک عبارت چطوری محاسبه میشه؟ با شکستن اون عبارت به زیر عبارت ها و ارزیابی هر کدوم از اون ها. خود عبارت در نهایت باید ارزیابی بشه
2.1.روش ارزیابی عبارت، بر اساس قواعدی که تعریف میکنیم انجام میشه.
و...

بله، همینطوری از بالا به پایین میریم تا جایی که میبینیم دید کاملی نسبت به اون مسئله کلی داریم و مسئله هم حل میکنیم!
خودم میخوام بیشتر روی این مهارت کار کنم، و هنوز به اندازه کافی تسلط ندارم، بدبختی اینجاس که ذهن ما همش سینتکس محور کار میکنه و مستقیم میره سراغ کد نویسی، در صورتی که این روش با این که اکثر مواقع جواب میده، ولی باعث میشه جنبه کلی روش حل مسئله رو درک نکنیم...
#نکته
👍2
خروجی کد زیر چیه؟
#include <stdio.h>
int main()
{
printf("%d", 0010 + 005);
return 0;
}

خروجی میشه 13، شاید با خودتون بگید که 0 پشت عدد که اهمیتی نداره، ولی زمانی که عددی رو با 0 شروع کنید، چه توی C چه C++، اون عدد به صورت اکتال در نظر گرفته میشه... یعنی 0 اول نشون میده که با اکتال طرفیم و سایر 0 ها که در ادامه بیان بی اهمیت هستن... 10 هم در اکتال میشه 8
#نکته
👍1
رابطه BCD و ASCII
قبل از اینکه بخوام رابطه اینارو با هم بگم، باید اول بدونید BCD چی چی هه
منظور از Binary Coded Decimal چیست؟
یک روش ذخیره سازی اعداد دهدهی در فرم باینری هستش؛ تفاوتش با حالت معمولی اینه که توی این حالت هر عدد رو به صورت جداگانه باینری در نظر میگیریم، یعنی هر رقم رو توی 4 بیت نمایش میدیم.

مثلاً عدد 99 در مبنای 10، توی فرم BCD میشه 1001 1001. مشکلی که BCD داره اینه که برای نمایش ارقام 0 تا 9 حداقل به 4 بیت نیاز داره، در صورتی که دو به توان چهار میشه 16، یعنی 6 حالت بلا استفاده و بی معنی(از نظر BCD) داریم!
از این کدگذاری بیشتر توی ماشین حساب های ساده یا مواردی از این قبیل استفاده میشه.
رابطه اش با ACII چیه؟
نکته جالبی که بد نیست بدونیم اینه که برای کاراکتر های عددی(0 تا 9) اگه 4 بیت بالا مرتبه رو نادیده بگیرم، به معادل BCD همون عدد مربوط به کاراکتر میرسیم!

مثلاً عدد 48 در اسکی کاراکتر 0 هستش:
0011 0000
عدد 57 در اسکی کاراکتر 9 هستش:
0011 1001
یعنی یکی از روش هایی که برای تبدیل کاراکتر اسکی به عدد معادل میتونیم انجام بدیم اینه که 4 بیت به سمت چپ شیفت بدیم، بعدش دوباره چهار بیت به سمت راست شیفت بدیم، یا اینکه با حالت زیر AND کنیم(بیشترین سرعت):
0000 1111 0x0F
یا اینکه مثل بچه آدم بیایم و اون رو از 48 کم کنیم.
#نکته #نیاز_به_بررسی
❤‍🔥1👍1
Forwarded from Central Vision Unit (FlowerFlow)
#REFLECTION

We all, at some point in our lives, feel super lonely, without support, cornered even.
Don't look for help. Don't scream. The solution never comes from above or below. It comes from within. You ultimately craft it, find it, or...

YOU DIE WITH THAT PAIN.

The moment you accept that no one is coming to save you is the exact moment you become FREE.

🖖
👍2❤‍🔥1
چت‌گارد (chatguard) چیه؟
چت‌گارد یه افزونه مرورگره که پیامات رو تو پیام‌رسان‌های وب کامل رمزنگاری می‌کنه، یعنی پیام‌ها بین تو و دوستت رو فقط خودتون می‌تونین بخونین و حتی سرور پیام‌رسان هم نمی‌تونه کاریش بکنه.
همه چی رمزگذاری End-to-End هستش و نیازی به سرور اضافه نیست، خودش همه کارو با پیام‌رسان انجام می‌ده.مهم‌تر از همه اینکه روی پیامرسان‌های بومی هم کار می‌کنه.
پروژه اوپن سورسه و هر کسی می‌تونه کدش رو ببینه یا کمکش کنه.
با تشکر از مصطفی خیبری که پروژه خفنی رو زده

🔗 GitHub
🔗 X (Twitter)

@shayangeedook
👍1
Forwarded from Shayan GeeDook🐧
پست ثابت | پروکسی و فیلترشکن (آپدیت مداوم)

اگه می‌خوای وصل بمونی و هر بار دنبال لینک جدید نگردی،
این پست رو سیو یا فوروارد کن

اینجا لیست پروکسی‌ها و فیلترشکن‌های سالم به‌صورت مداوم آپدیت میشه.
اینجارو داشته باش ما همیشه لینک هارو اپدیت میکنیم👇

منابع و کانال‌های پیشنهادی:

🔗 @azad_times
🔗 @ProxySnipe
🔗 @ProxyTelCo
🔗 @freeebirdss
🔗 @vpnx44
🔗 @xsfilternet
🔗 @Fr33C0nfig
🔗 @proxymtprotoir
🔗 @iRoProxy
🔗 @Myporoxy
🔗 @iMTProto
🔗 @darkproxy
🔗 @xbat_team

نکات مهم:
بعضی پروکسی‌ها موقتی قطع می‌شن؛ چند ساعت بعد دوباره تست کن
همیشه چند گزینه داشته باش، به یکی وابسته نباش
این پست مرجع ثابته و مرتب آپدیت می‌شه
این پیام رو نگه دار هر آپدیت جدیدی باشه، همین‌جا اضافه می‌کنیم.

@shayangeedook
❤‍🔥1
Forwarded from RahaRM | رها آرام
توجه توجه ...
صدایی که هم اکنون میشنوید ...
اعلان خطر یا وضعیت قرمز است ...
و معنی و مفهوم آن اینست که ...
به زودی اینترنت طبقانی با شدت بیشتری انجام خواهد شد ...
محل خود را ترک و از کشور خارج شوید ...
........................................

#منهای_سیاست
👍7