یادداشت های برنامه نویس آماتور | Amateur programmer notes
61 subscribers
92 photos
10 videos
34 files
88 links
اندازه ی آرزو هات مهم نیست
مهم اینه تو چقد میبینیش
آرزو هاتو بزرگ ببین


</create> by <ashkan\>
Download Telegram
#بیشتر_بدانید
اهمیت هدر گارد ها
header guards

#ifndef HEADER_H

#define HEADER_H


#endif


حتما همتون تا حالا هدر گاردهایی مثل بالا رو دیدید
اما اهمیتشون چیه؟
خیلی خلاصه جلوگیری از تعریف چندبار سهوی و ارور های ناخواسته

در مثال زیر خیلی ساده بهتون میگم چرا مفیدن
یه نکته » من برای جلوگیری از تکرار اسم هدر گارد ها از روشی استفاده میکنم که تقریبا اکثر برنامه نویس ها از اون روش استفاده میکنن
#define HEADERNAME_H

که
HEADERNAME
همون نام فایل هدر هست

حالا مثال:
محتویات فایل header2.h


#include <iostream>

using namespace std;


void helloworld()

{

    cout<<"Hello World!"<<endl;

}


محتویات فایل header1.h
#include "header2.h"


void sayhello()

{

    helloworld();

}

محتویات فایل اصلی سی پلاس پلاس
#include "header1.h"



int main(){

   sayhello();

   return 0;

}


میبینیدکه ارور نمیده و اجرا میشه
حالا
#include "header2.h"

`
رو به فایل سی پلاس پلاس اضافه کنین


#include "header1.h"

#include "header2.h"


int main(){

   sayhello();

   return 0;

}


چه قبل اون header1.h بذارید چه بعدش ارور میده چون
`void helloworld()

دوبار تعریف میشه

حالا بیایید هدرگارد برای هر دو هدر تعریف کنید
محتویات جدید header2.h
#ifndef HEADER2_H

#define HEADER2_H


#include <iostream>

using namespace std;


void helloworld()

{

    cout<<"Hello World!"<<endl;

}


#endif


محتویات جدید header1.h
#ifndef HEADER1_H

#define HEADER1_H


#include "header2.h"


void sayhello()

{

    helloworld();

}


#endif


و محتوای فایل اصلی
#include "header1.h"

#include "header2.h"


int main(){

   sayhello();

   return 0;

}


دیگه ارور نمیده
چند بار هم اینکلاد کنم خیالتون راحت شه
#include "header1.h"

#include "header2.h"

#include "header1.h"

#include "header2.h"

#include "header1.h"

#include "header2.h"

#include "header1.h"

#include "header2.h"


int main(){

   sayhello();

   return 0;

}


امیدوارم پی برده به باشید به اهمیتشون
نکته آخر: نوشته اشکان♻️
در بعضی کامپایلر ها لازم نیست
این همه تایپ
کنیم
#pragma once
دقیقا همین کار رو انجام می
ده
بازم میگم فق
ط
بعضی کامپایلر ها


موفق باشید
کدهاتون هم بی باگ
#بیشتر_بدانید
اهمیت هدر گارد ها
header guards

#ifndef HEADER_H

#define HEADER_H


#endif


حتما همتون تا حالا هدر گاردهایی مثل بالا رو دیدید
اما اهمیتشون چیه؟
خیلی خلاصه جلوگیری از تعریف چندبار سهوی و ارور های ناخواسته

در مثال زیر خیلی ساده بهتون میگم چرا مفیدن
یه نکته » من برای جلوگیری از تکرار اسم هدر گارد ها از روشی استفاده میکنم که تقریبا اکثر برنامه نویس ها از اون روش استفاده میکنن
#define HEADERNAME_H

که
HEADERNAME
همون نام فایل هدر هست

حالا مثال:
محتویات فایل header2.h


#include <iostream>

using namespace std;


void helloworld()

{

    cout<<"Hello World!"<<endl;

}


محتویات فایل header1.h
#include "header2.h"


void sayhello()

{

    helloworld();

}

محتویات فایل اصلی سی پلاس پلاس
#include "header1.h"



int main(){

   sayhello();

   return 0;

}


میبینیدکه ارور نمیده و اجرا میشه
حالا
#include "header2.h"

`
رو به فایل سی پلاس پلاس اضافه کنین


#include "header1.h"

#include "header2.h"


int main(){

   sayhello();

   return 0;

}


چه قبل اون header1.h بذارید چه بعدش ارور میده چون
`void helloworld()

دوبار تعریف میشه

حالا بیایید هدرگارد برای هر دو هدر تعریف کنید
محتویات جدید header2.h
#ifndef HEADER2_H

#define HEADER2_H


#include <iostream>

using namespace std;


void helloworld()

{

    cout<<"Hello World!"<<endl;

}


#endif


محتویات جدید header1.h
#ifndef HEADER1_H

#define HEADER1_H


#include "header2.h"


void sayhello()

{

    helloworld();

}


#endif


و محتوای فایل اصلی
#include "header1.h"

#include "header2.h"


int main(){

   sayhello();

   return 0;

}


دیگه ارور نمیده
چند بار هم اینکلاد کنم خیالتون راحت شه
#include "header1.h"

#include "header2.h"

#include "header1.h"

#include "header2.h"

#include "header1.h"

#include "header2.h"

#include "header1.h"

#include "header2.h"


int main(){

   sayhello();

   return 0;

}


امیدوارم پی برده به باشید به اهمیتشون
نکته آخر: نوشته اشکان♻️
در بعضی کامپایلر ها لازم نیست
این همه تایپ
کنیم
#pragma once
دقیقا همین کار رو انجام می
ده
بازم میگم فق
ط
بعضی کامپایلر ها


موفق باشید
کدهاتون هم بی باگ