0 ໂຫວດ

++Preprocessor ໃນພາສາ C ມີຫຍັງແດ່++

ຈາກການທີ່ເຫັນຫລາຍຕໍ່ຫລາຍໆທ່ານສົນໃຈໃນພາສາC ມື້ນີ້ຂ້າພະເຈົ້າກໍ່ຈະມາເວົ້າເຖີງ Preprocessor ໃນພາສາ C ວ່າມັນມີຫຍັງແດ່
ຈື່ງບໍ່ໄດ້ຕ້ອງຫ່າວໄດ້ຫ່າວຂຽນ ເອົາມາເບີ່ງກັນເລີຍ

#include

    #include <ຊື່ໄຟລ໌ສ່ວນຫົວ>
    #include “ຊື່ໄຟລ໌ສ່ວນຫົວ”

    ການໃຊ້#include ມີສອງລັກສະນະຄືໃຊ້ເຄື່ອງຫມາຍ <….> ເພື່ອບອກວ່າຕຳແຫນ່ງຂອງໄຟລ໌ .h ນັ້ນຢູ່ໃນໂຟເດີ້ຂອງ lib ແຕ່ຖ້າແມ່ນ “…” ນັ້ນຫມາຍຄວາມວ່າໄຟລ໌ສ່ວນຫົວຢູ່ໃນໂຟເດີ້ປັດຈຸບັນຂອງໄຟລ໌ໂປຣແກຣມ

Example

Mylibrary.h

int GetSum( int x, int y)
{
return x+y;
}

MainProgram.h

#include <stdio.h>
#include <conio.h>
#include “mylibrary.h”

void main( )
{
printf(“Sum = %d\n”,GetSum(5,6);
}

#define

#define ຊື່ຂອງຄ່າຄົງທີ່ี่ [ຄ່າທີ່ຕ້ອງການ]

ໃນການປະກາດຄ່າຄົງທີ່ໃນໂປຣແກຣມເມື່ອປະກາດແລ້ວຈະປ່ຽນແປງບໍ່ໄດ້ຫມົດໂປຣແກຣມ

Example 1

#include <stdio.h>
#define MAX 10

void main()
{
for (int i=0;i<MAX;i++)
{
  printf("Hello\n");
}
}

Example 2

ໃຊ້ define ສາມາດປະມວນຜົນເຫລັກໆນ້ອຍໆໄດ້ເຊັ່ນ

#define DOUBLE(x) x+x
#define SUM(a1,a2) a1+a2
…………..
…………
printf("Double = %d\n",DOUBLE(25));
printf("Sum = %d\n",SUM(25,5));

Example 3

ເຮົາສາມາດເພີ່ມເງື່ອນໄຂໃນການປະກາດຄ່າຄົງທີ່ໄດ້ດັ່ງຕົວຢ່າງ

#define FINDMAX(a,b) (a>b ? a : b)
……………..
printf("Max = %d\n",FINDMAX(1,5));

ຈາກຕົວຢ່າງເຮົາກຳນົດໃຫ້ຮັບຄ່າມາ 2 ຄ່າ ແລະກວດສອບ ວ່າ a>b ຫລືບໍ່ ຖ້າແມ່ນກໍ່ຈະໃຫ້ຄ່າທີ່ຢູ່ຫລັງເຄື່ອງຫມາຍ ? ແຕ່ຖ້າບໍ່ແມ່ນຈະໃຫ້ຄ່າຂອງ b ອອກມາການໃຊ້ເຄື່ອງຫມາຍ ? ແລະ : ກໍ່ຈະຄືກັນກັບ if ແລະ else ນັ້ນເອງ  ລອງເບີ່ງຈາກຕົວຢ່າງຕໍ່ໄປ

#define ISEMPTY(x) (x==0 ? 1 : 0)
…………
int data;
data=0;
if (ISEMPTY(data))
{
printf("It is empty\n");
}

ຜົນການລັນ
It is empty

ຫລືຊິຂຽນແບບນີ້ກໍ່ໄດ້

#define ISEMPTY(x) (x==0 ? "YES" : "NO")
………………..
int data=0;
printf("%s\n",ISEMPTY(0));

#undef

#under ຊື່ຄ່າຄົງທີ່ທີ່ຕ້ອງການລຶບ

ໃຊ້ຍົກເລີກຄ່າຄົງທີ່ ເຊີ່ງຖ້າເຮົາຍົກເລີກແລ້ວໂປຣແກຣມອາດຈະແປບໍ່ຜ່ານເພາະຫາຄ່າຄົງທີ່ນັ້ນບໍ່ພົບ
ເຮົາຈະໃຊ້ໃນກໍລະນີທີ່ຕ້ອງການເປີດຊ່ອງທາງໃຫ້ນັກພັດທະນາໂປຣແກຣມຕໍ່ຈາກເຮົາສາມາດປັບແຕ່ງຊ໊ອດໂຄດຂອງເຮົາໃຫ້ສົມບູນຫລາຍຂື້ນໆໄປ

Example

#include <stdio.h>

#define PINE 3.14

void main()
{
printf("INE = %f\n",PINE);
#undef PINE
printf("INE = %f\n",PINE); 
}

ຕົວຢ່າງນີ້ ແປໂປແກຣມບໍ່ໄດ້ ຄ່າຄົງທີ່ PINE ຖືກປະກາດແລ້ວ ແຕ່ໃນ main ໄປຂຽນຍົກເລີກຄ່າຄົງທີ່ມັນເລີຍເກີດError ທີ່ແຖວສຸດທ້າຍແຕ່ບໍ່ທ້າຍສຸດນັ້ນເອງ

#ifdef, #ifndef, #else, #elif, #endif

#ifdef  x ຄ່າ x ຕ້ອງການມີການປະກາດເອົາໄວ້ຫລືບໍ່
#ifndef x ຄ່າ x ບໍ່ມີການປະກາດເອົາໄວ້ ແມ່ນ ຫລື ບໍ່ແມ່ນ
#elif x  ໃຊ້ຮ່ວມກັບສອງໂຕດ້ານເທິງໃນກໍລະນີທີ່ຕ້ອງການກວດສອບຄ່າອື່ນ
#else   ໃຊ້ຮ່ວມກັບ #ifdef, #ifndef และ #elif
#endif  ຂຽນເອົາໄວ້ຕອນຈົບທຸກໆຄັ້ງທີ່ເອີ້ນໃຊ້ໄດລເລັກທີຟຊຸດນີ້

ໃຊ້ຄືກັນກັບ if, else, elseif ເຊີ່ງເປັນການກວດສອບວ່າຄ່າທີ່ຕ້ອງການນັ້ນມີການປະກາດເອົາໄວ້ຫລືບໍ່ ລອງເບີ່ງຕົວຢ່າງເພື່ອຄວາມເຂົ້າໃຈ


Example 1

#include <stdio.h>

#define PINE 3.14

void main()
{
#ifdef PINE
printf("Circle area = %f\n",PINE*2.5*2.5);
#else
printf("Constant PINE doesn't exist\n");
#endif
}

RUN
Circle area = 19.625000

Example 2

#include <stdio.h>

void main()
{
#ifdef PINE
printf("Circle area = %f\n",PINE*2.5*2.5);
#else
printf("Constant PINE doesn't exist\n");
#endif
}

RUN
Constant PINE doesn't exist

ຈາກທັງສອງຕົວຢ່າງ ຕົວຢ່າງທຳອິດຈະມີການປະກາດ PINE ເອົາໄວ້ເມື່ອມາໃນ #ifdef ກໍ່ຈະເຊັກວ່າຄ່າຄົງທີ່ PINE ມີການປະກາດເອົາໄວ້ຫລືບໍ່
ຖ້າແມ່ນຄວາມຈິງກໍ່ໃຫ້ເອົາມາຄຳນວນຫາພື້ນທີ່ວົງກົມ ແຕ່ໃນຕົວຢ່າງທີ່ສອງ ໄດ້ຕັດການປະກາດຄ່າ PINE ອອກໄປຜົນການລັນໂປຣແກຣມຈື່ງຕົກລົງມາ
ເຮັດວຽກທີ່ #else


ໃຜມີບັນຫາຫລືຂໍ້ຂ້ອງໃຈໃດ໋ໆກໍ່ຖາມໄດ້ ຕອບບໍ່ໄດ້ກະຊິບອກວ່າບໍ່ໄດ້  :-*
credit:devsmudger
ໄດ້ຖາມ ທັນວາ 1, 2016 ໃນ Computer Zone ໂດຍ No Noy Seebounhueng (1,530 ຄະແນນ)

ກະລຸນາ ເຂົ້າສູ່ລະບົບ ຫຼື ສະໝັກສະມາຊິກ ເພື່ອຕອບຄຳຖາມນີ້.

ຍິນດີຕ້ອນຮັບ ທ່ານເຂົ້າສູ່ ລາວຊ້າາາາາາ Laozaa dot com ສັງຄົມອອນລາຍ ຂອງປວງຊົນລາວທັງຊາດ ພົບກັບ ຄວາມຫນ້າຮັກ ແລະ ສົດໄສ ຂອງ ຄົນລາວຮຸ່ນໃຫມ່ໄວຊ່າ........ໄດ້ທີ່ນີ້.