ນີ້ແມ່ນຄໍາສັ່ງ bc ທີ່ສາມາດດໍາເນີນການໄດ້ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີໂດຍໃຊ້ຫນຶ່ງໃນຫຼາຍໆບ່ອນເຮັດວຽກອອນໄລນ໌ຂອງພວກເຮົາເຊັ່ນ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator
ໂຄງການ:
NAME
bc - ພາສາເຄື່ອງຄິດເລກຄວາມແມ່ນຍໍາໂດຍຕົນເອງ
SYNTAX
bc [ -hlwsqv ] [ທາງເລືອກຍາວ] [ ເອກະສານ ... ]
ລາຍລະອຽດ
bc ເປັນພາສາທີ່ສະຫນັບສະຫນູນຕົວເລກຄວາມແມ່ນຍໍາໂດຍຕົນເອງທີ່ມີການປະຕິບັດການໂຕ້ຕອບຂອງ
ຖະແຫຼງການ. ມີຄວາມຄ້າຍຄືກັນບາງຢ່າງໃນ syntax ກັບພາສາການຂຽນໂປລແກລມ C. ກ
ຫ້ອງສະຫມຸດຄະນິດສາດມາດຕະຖານສາມາດໃຊ້ໄດ້ໂດຍຕົວເລືອກເສັ້ນຄໍາສັ່ງ. ຖ້າຮ້ອງຂໍ, ຫ້ອງສະຫມຸດຄະນິດສາດ
ຖືກກໍານົດໄວ້ກ່ອນທີ່ຈະປະມວນຜົນໄຟລ໌ໃດໆ. bc ເລີ່ມຕົ້ນໂດຍການປະມວນຜົນລະຫັດຈາກໄຟລ໌ທັງຫມົດ
ລະບຸໄວ້ໃນເສັ້ນຄໍາສັ່ງໃນຄໍາສັ່ງທີ່ລະບຸໄວ້. ຫຼັງຈາກທີ່ໄຟລ໌ທັງຫມົດໄດ້ຮັບການປຸງແຕ່ງ, bc
ອ່ານຈາກວັດສະດຸປ້ອນມາດຕະຖານ. ລະຫັດທັງຫມົດຖືກປະຕິບັດຍ້ອນວ່າມັນຖືກອ່ານ. (ຖ້າໄຟລ໌ມີ a
ຄໍາສັ່ງຢຸດໂຮງງານຜະລິດ, bc ຈະບໍ່ເຄີຍອ່ານຈາກວັດສະດຸປ້ອນມາດຕະຖານ.)
ສະບັບພາສາຂອງໂຄງການນີ້ bc ມີສ່ວນຂະຫຍາຍຫຼາຍອັນນອກເໜືອໄປຈາກແບບດັ້ງເດີມ bc ການປະຕິບັດແລະ
ຮ່າງມາດຕະຖານ POSIX. ຕົວເລືອກແຖວຄໍາສັ່ງສາມາດເຮັດໃຫ້ສ່ວນຂະຫຍາຍເຫຼົ່ານີ້ພິມ a
ການເຕືອນໄພຫຼືຖືກປະຕິເສດ. ເອກະສານນີ້ອະທິບາຍພາສາທີ່ຍອມຮັບໂດຍນີ້
ໂຮງງານຜະລິດ. ສ່ວນຂະຫຍາຍຈະຖືກກໍານົດເປັນເຊັ່ນນັ້ນ.
OPTIONS
-h, --help
ພິມການນໍາໃຊ້ແລະອອກ.
-i, --ໂຕ້ຕອບ
ບັງຄັບໂໝດໂຕ້ຕອບ.
-l, --ມາທິບ
ກໍານົດຫ້ອງສະຫມຸດຄະນິດສາດມາດຕະຖານ.
-w, --ເຕືອນ
ໃຫ້ຄໍາເຕືອນສໍາລັບການຂະຫຍາຍ POSIX bc.
-s, --ມາດຕະຖານ
ຂະບວນການ POSIX ຢ່າງແທ້ຈິງ bc ພາສາ.
-q, --ງຽບ
ຢ່າພິມ GNU bc ປົກກະຕິຍິນດີຕ້ອນຮັບ.
-v, --ເວີຊັ່ນ
ພິມຈໍານວນສະບັບແລະລິຂະສິດແລະອອກ.
ຈໍານວນ
ອົງປະກອບພື້ນຖານທີ່ສຸດໃນ bc ແມ່ນຕົວເລກ. ຕົວເລກແມ່ນຕົວເລກຄວາມແມ່ນຍໍາໂດຍຕົນເອງ.
ຄວາມແມ່ນຍໍານີ້ແມ່ນຢູ່ໃນສ່ວນຈໍານວນເຕັມແລະສ່ວນເສດສ່ວນ. ຕົວເລກທັງໝົດແມ່ນ
ເປັນຕົວແທນພາຍໃນໃນອັດຕາທົດສະນິຍົມແລະການຄິດໄລ່ທັງຫມົດແມ່ນເຮັດເປັນທົດສະນິຍົມ. (ສະບັບນີ້
truncates ຜົນໄດ້ຮັບຈາກການດໍາເນີນງານການແບ່ງແລະຄູນ.) ມີສອງຄຸນລັກສະນະຂອງ
ຕົວເລກ, ຄວາມຍາວແລະຂະຫນາດ. ຄວາມຍາວແມ່ນຕົວເລກທັງໝົດຂອງຕົວເລກທົດສະນິຍົມ
ຕົວເລກເປັນຕົວເລກ ແລະຂະໜາດແມ່ນຕົວເລກທັງໝົດຂອງຕົວເລກທົດສະນິຍົມຫຼັງຈາກທົດສະນິຍົມ
ຈຸດ. ຍົກຕົວຢ່າງ:
.000001 ມີຄວາມຍາວຂອງ 6 ແລະຂະຫນາດຂອງ 6.
1935.000 ມີຄວາມຍາວ 7 ແລະຂະຫນາດ 3.
ຄວາມຮັບຜິດຊອບ
ຕົວເລກຖືກເກັບໄວ້ໃນສອງປະເພດຂອງຕົວແປ, ຕົວແປງ່າຍດາຍແລະ arrays. ທັງສອງງ່າຍດາຍ
ຕົວແປແລະຕົວແປ array ມີຊື່. ຊື່ເລີ່ມຕົ້ນດ້ວຍຕົວອັກສອນຕາມດ້ວຍຕົວເລກໃດນຶ່ງ
ຕົວອັກສອນ, ຕົວເລກ ແລະ ຂີດກ້ອງ. ຕົວອັກສອນທັງໝົດຕ້ອງເປັນຕົວພິມນ້ອຍ. (ໂຕເລກເຕັມ
ຊື່ແມ່ນນາມສະກຸນ. ໃນ POSIX bc ຊື່ທັງໝົດແມ່ນຕົວພິມນ້ອຍດຽວ.) ປະເພດ
ຂອງຕົວແປແມ່ນຈະແຈ້ງໂດຍບໍລິບົດເພາະວ່າຊື່ຕົວແປ array ທັງຫມົດຈະຖືກປະຕິບັດຕາມ
ວົງເລັບ ([]).
ມີສີ່ຕົວແປພິເສດ, ຂະ ໜາດ, ibase, obase, ແລະ ສຸດທ້າຍ. ຂະຫນາດ ກໍານົດວິທີການຈໍານວນຫນຶ່ງ
ການດໍາເນີນງານໃຊ້ຕົວເລກຫຼັງຈາກຈຸດທົດສະນິຍົມ. ຄ່າເລີ່ມຕົ້ນຂອງ ຂະຫນາດ ແມ່ນ 0. ອິເບສ
ແລະ ເຈົ້ານາຍ ກໍານົດຖານການປ່ຽນແປງສໍາລັບການປ້ອນຂໍ້ມູນແລະຜົນຜະລິດຈໍານວນ. ຄ່າເລີ່ມຕົ້ນຂອງທັງສອງ
input ແລະ output ແມ່ນພື້ນຖານ 10. ສຸດທ້າຍ (ການຂະຫຍາຍ) ແມ່ນຕົວແປທີ່ມີມູນຄ່າຂອງ
ຕົວເລກພິມສຸດທ້າຍ. ເຫຼົ່ານີ້ຈະໄດ້ຮັບການປຶກສາຫາລືໃນລາຍລະອຽດເພີ່ມເຕີມຕາມຄວາມເຫມາະສົມ. ທັງໝົດ
ຕົວແປເຫຼົ່ານີ້ອາດຈະມີມູນຄ່າທີ່ຖືກມອບຫມາຍໃຫ້ພວກເຂົາເຊັ່ນດຽວກັນກັບການນໍາໃຊ້ໃນການສະແດງຜົນ.
COMMENTS
ຄຳເຫັນໃນ bc ເລີ່ມຕົ້ນດ້ວຍຕົວອັກສອນ /* ແລະສິ້ນສຸດດ້ວຍຕົວອັກສອນ */. ຄໍາເຫັນອາດຈະ
ເລີ່ມຕົ້ນບ່ອນໃດກໍໄດ້ ແລະປາກົດເປັນຊ່ອງຫວ່າງດຽວໃນວັດສະດຸປ້ອນ. (ນີ້ເຮັດໃຫ້ຄໍາເຫັນ
ຈຳກັດລາຍການປ້ອນຂໍ້ມູນອື່ນໆ. ຕົວຢ່າງ, ຄໍາຄິດຄໍາເຫັນບໍ່ສາມາດພົບເຫັນຢູ່ໃນກາງຂອງ a
ຊື່ຕົວແປ.) ຄຳເຫັນລວມມີແຖວໃໝ່ (ແຖວທ້າຍ) ລະຫວ່າງຈຸດເລີ່ມຕົ້ນ ແລະຈຸດຈົບ
ຂອງຄໍາເຫັນ.
ເພື່ອສະຫນັບສະຫນູນການນໍາໃຊ້ scripts ສໍາລັບ bc, ຄໍາເຫັນແຖວດຽວໄດ້ຖືກເພີ່ມເປັນ
ການຂະຫຍາຍ. ຄຳເຫັນແຖວດຽວເລີ່ມຕົ້ນທີ່ ກ # ລັກສະນະແລະສືບຕໍ່ໄປໃນຕອນທ້າຍຕໍ່ໄປຂອງ
ເສັ້ນ. ຕົວອັກສອນທ້າຍແຖວບໍ່ແມ່ນສ່ວນໜຶ່ງຂອງຄຳເຫັນ ແລະຖືກປະມວນຜົນຕາມປົກກະຕິ.
ການສະແດງອອກ
ຕົວເລກຖືກໝູນໃຊ້ໂດຍການສະແດງອອກ ແລະຄຳຖະແຫຼງ. ນັບຕັ້ງແຕ່ພາສາແມ່ນ
ຖືກອອກແບບເພື່ອໃຫ້ມີການໂຕ້ຕອບ, ຖະແຫຼງການແລະການສະແດງອອກຖືກປະຕິບັດໃນທັນທີທີ່ເປັນໄປໄດ້.
ບໍ່ມີໂຄງການ "ຕົ້ນຕໍ". ແທນທີ່ຈະ, ລະຫັດຖືກປະຕິບັດຍ້ອນວ່າມັນພົບ. (ຫນ້າທີ່,
ປຶກສາຫາລືໃນລາຍລະອຽດຕໍ່ມາ, ຖືກກໍານົດໃນເວລາທີ່ພົບ.)
ການສະແດງອອກທີ່ງ່າຍດາຍແມ່ນພຽງແຕ່ຄົງທີ່. bc ປ່ຽນຄ່າຄົງທີ່ເປັນທົດສະນິຍົມພາຍໃນ
ຕົວເລກໂດຍການນໍາໃຊ້ພື້ນຖານການປ້ອນຂໍ້ມູນປະຈຸບັນ, ກໍານົດໂດຍຕົວປ່ຽນແປງ ອິເບສ. (ມີ
ຂໍ້ຍົກເວັ້ນໃນຫນ້າທີ່.) ຄຸນຄ່າທາງດ້ານກົດຫມາຍຂອງ ອິເບສ ແມ່ນ 2 ຫາ 16. ການກຳນົດຄ່າ
ຢູ່ນອກຂອບເຂດນີ້ ອິເບສ ຈະສົ່ງຜົນໃຫ້ມີຄ່າ 2 ຫຼື 16. ຕົວເລກທີ່ປ້ອນເຂົ້າອາດມີ
ຕົວອັກສອນ 0–9 ແລະ A–F. (ໝາຍເຫດ: ພວກມັນຕ້ອງເປັນຕົວພິມໃຫຍ່. ໂຕພິມນ້ອຍແມ່ນຕົວປ່ຽນໄດ້
names.) ຕົວເລກດຽວມີຄ່າຂອງຕົວເລກສະເໝີໂດຍບໍ່ຄໍານຶງເຖິງມູນຄ່າ
of ອິເບສ. (ເຊັ່ນ: A = 10.) ສໍາລັບຕົວເລກຫຼາຍຕົວເລກ, bc ປ່ຽນຕົວເລກການປ້ອນຂໍ້ມູນທັງໝົດຫຼາຍກວ່າ ຫຼື
ເທົ່າກັບ ibase ກັບມູນຄ່າຂອງ ອິເບສ-1. ນີ້ເຮັດໃຫ້ຈໍານວນ FFF ສະເຫມີເປັນທີ່ໃຫຍ່ທີ່ສຸດ 3
ຕົວເລກຂອງຖານປ້ອນຂໍ້ມູນ.
ການສະແດງອອກເຕັມແມ່ນຄ້າຍຄືກັນກັບຫຼາຍພາສາລະດັບສູງອື່ນໆ. ເນື່ອງຈາກວ່າມີພຽງແຕ່ຫນຶ່ງ
ປະເພດຂອງຈໍານວນ, ບໍ່ມີກົດລະບຽບສໍາລັບການປະສົມປະເພດ. ແທນທີ່ຈະ, ມີກົດລະບຽບກ່ຽວກັບການ
ຂະຫນາດຂອງການສະແດງອອກ. ທຸກໆການສະແດງອອກມີຂະຫນາດ. ນີ້ແມ່ນມາຈາກຂະຫນາດຂອງ
ຕົວເລກຕົ້ນສະບັບ, ການດໍາເນີນການປະຕິບັດແລະໃນຫຼາຍໆກໍລະນີ, ມູນຄ່າຂອງຕົວແປ
ຂະຫນາດ. ຄ່າທາງກົດໝາຍຂອງຕົວແປ ຂະຫນາດ ແມ່ນ 0 ເຖິງຈໍານວນສູງສຸດທີ່ເປັນຕົວແທນໂດຍ C
ເລກເຕັມ.
ໃນຄໍາອະທິບາຍຕໍ່ໄປນີ້ຂອງການສະແດງອອກທາງດ້ານກົດຫມາຍ, "expr" ຫມາຍເຖິງການສະແດງອອກທີ່ສົມບູນ
ແລະ "var" ຫມາຍເຖິງຕົວແປທີ່ງ່າຍດາຍຫຼື array. ຕົວແປທີ່ງ່າຍດາຍແມ່ນພຽງແຕ່ a
ຊື່
ແລະຕົວແປ array ຖືກກໍານົດເປັນ
ຊື່[ຕົວຢ່າງ]
ເວັ້ນເສຍແຕ່ໄດ້ກ່າວເຖິງໂດຍສະເພາະຂະຫນາດຂອງຜົນໄດ້ຮັບແມ່ນຂະຫນາດສູງສຸດຂອງ
ການສະແດງອອກທີ່ກ່ຽວຂ້ອງ.
- expr ຜົນໄດ້ຮັບແມ່ນການປະຕິເສດຂອງການສະແດງອອກ.
++ var ຕົວແປແມ່ນເພີ່ມຂຶ້ນໂດຍຫນຶ່ງແລະຄ່າໃຫມ່ແມ່ນຜົນຂອງ
ການສະແດງອອກ.
-- var ຕົວປ່ຽນແມ່ນຫຼຸດລົງໂດຍອັນໜຶ່ງ ແລະຄ່າໃໝ່ແມ່ນຜົນມາຈາກ
ການສະແດງອອກ.
var ++
ຜົນໄດ້ຮັບຂອງການສະແດງອອກແມ່ນຄ່າຂອງຕົວແປແລະຫຼັງຈາກນັ້ນຕົວແປແມ່ນ
ເພີ່ມຂຶ້ນຫນຶ່ງ.
var -- ຜົນໄດ້ຮັບຂອງການສະແດງອອກແມ່ນຄ່າຂອງຕົວແປແລະຫຼັງຈາກນັ້ນຕົວແປແມ່ນ
ຫຼຸດລົງໂດຍຫນຶ່ງ.
expr + expr
ຜົນໄດ້ຮັບຂອງການສະແດງອອກແມ່ນຜົນລວມຂອງສອງສໍານວນ.
expr - expr
ຜົນໄດ້ຮັບຂອງການສະແດງອອກແມ່ນຄວາມແຕກຕ່າງຂອງສອງສໍານວນ.
expr * expr
ຜົນໄດ້ຮັບຂອງການສະແດງອອກແມ່ນຜະລິດຕະພັນຂອງສອງສໍານວນ.
expr / expr
ຜົນໄດ້ຮັບຂອງການສະແດງອອກແມ່ນ quotient ຂອງສອງສໍານວນ. ຂະຫນາດຂອງ
ຜົນໄດ້ຮັບແມ່ນມູນຄ່າຂອງຕົວແປ ຂະຫນາດ.
expr % expr
ຜົນໄດ້ຮັບຂອງການສະແດງອອກແມ່ນ "ສ່ວນທີ່ເຫຼືອ" ແລະມັນຖືກຄິດໄລ່ຕໍ່ໄປນີ້
ທາງ. ເພື່ອຄຳນວນ a%b, ທຳອິດ a/b ຖືກຄຳນວນເປັນ ຂະຫນາດ ຕົວເລກ. ຜົນໄດ້ຮັບນັ້ນຖືກນໍາໃຊ້
ການຄິດໄລ່ a-(a/b)*b ກັບຂະຫນາດສູງສຸດຂອງ ຂະຫນາດ+scale(b) ແລະ scale(a).
If ຂະຫນາດ ຖືກຕັ້ງເປັນສູນ ແລະທັງສອງສຳນວນແມ່ນຈຳນວນເຕັມສຳນວນນີ້ແມ່ນ the
ຟັງຊັນທີ່ເຫຼືອຈຳນວນເຕັມ.
expr ^ expr
ຜົນໄດ້ຮັບຂອງການສະແດງອອກແມ່ນມູນຄ່າຂອງຄັ້ງທໍາອິດຍົກຂຶ້ນມາເປັນຄັ້ງທີສອງ. ໄດ້
ການສະແດງຜົນທີສອງຕ້ອງເປັນຈຳນວນເຕັມ. (ຖ້າສຳນວນທີສອງບໍ່ແມ່ນຈຳນວນເຕັມ,
ການເຕືອນໄພຖືກສ້າງຂຶ້ນແລະການສະແດງອອກໄດ້ຖືກຕັດເພື່ອໃຫ້ໄດ້ຮັບຄ່າຈໍານວນເຕັມ.)
ຂະຫນາດຂອງຜົນໄດ້ຮັບແມ່ນ ຂະຫນາດ ຖ້າເລກກຳລັງເປັນລົບ. ຖ້າເລກກຳລັງແມ່ນ
ບວກຂະຫນາດຂອງຜົນໄດ້ຮັບແມ່ນຕໍາ່ສຸດທີ່ຂອງຂະຫນາດຂອງຄັ້ງທໍາອິດ
expression ຄູນຄ່າຂອງເລກກຳລັງ ແລະຄ່າສູງສຸດຂອງ ຂະຫນາດ ແລະຂະຫນາດ
ຂອງການສະແດງອອກທໍາອິດ. (ເຊັ່ນ: scale(a^b) = min(scale(a)*b, max( ຂະ ໜາດ,
scale(a))).) ຄວນສັງເກດວ່າ expr^0 ຈະສົ່ງຄ່າຂອງ 1 ສະເໝີ.
( expr )
ອັນນີ້ປ່ຽນແປງຄວາມສຳຄັນຂອງມາດຕະຖານເພື່ອບັງຄັບໃຫ້ມີການປະເມີນການສະແດງອອກ.
var = expr
ຕົວແປແມ່ນໄດ້ມອບໝາຍຄ່າຂອງການສະແດງຜົນ.
var = expr
ນີ້ແມ່ນເທົ່າກັບ "var = var expr "ມີຂໍ້ຍົກເວັ້ນວ່າສ່ວນ "var".
ຖືກປະເມີນພຽງແຕ່ຄັ້ງດຽວ. ນີ້ສາມາດເຮັດໃຫ້ຄວາມແຕກຕ່າງຖ້າ "var" ເປັນ array.
ການສະແດງຜົນຄວາມສໍາພັນແມ່ນປະເພດພິເສດຂອງການສະແດງອອກທີ່ສະເຫມີປະເມີນເປັນ 0 ຫຼື 1, 0
ຖ້າຄວາມສຳພັນເປັນຜິດ ແລະ 1 ຖ້າຄວາມສຳພັນເປັນຄວາມຈິງ. ສິ່ງເຫຼົ່ານີ້ອາດຈະປາກົດຢູ່ໃນກົດໝາຍໃດໆ
ການສະແດງອອກ. (POSIX bc ຮຽກຮ້ອງໃຫ້ມີການສະແດງອອກທີ່ກ່ຽວຂ້ອງພຽງແຕ່ໃນຖ້າຫາກວ່າ, ໃນຂະນະທີ່,
ແລະສໍາລັບຄໍາຖະແຫຼງທີ່ແລະການທົດສອບຄວາມກ່ຽວຂ້ອງພຽງແຕ່ຫນຶ່ງອາດຈະຖືກເຮັດຢູ່ໃນພວກມັນ.) ຄວາມສໍາພັນ
ຜູ້ປະກອບການແມ່ນ
expr1 < expr2
ຜົນໄດ້ຮັບແມ່ນ 1 ຖ້າ expr1 ຢ່າງເຂັ້ມງວດຫນ້ອຍກວ່າ expr2.
expr1 <= expr2
ຜົນໄດ້ຮັບແມ່ນ 1 ຖ້າ expr1 ໜ້ອຍກວ່າ ຫຼືເທົ່າກັບ expr2.
expr1 > expr2
ຜົນໄດ້ຮັບແມ່ນ 1 ຖ້າ expr1 ແມ່ນຫຼາຍກວ່າ expr2 ຢ່າງເຂັ້ມງວດ.
expr1 >= expr2
ຜົນໄດ້ຮັບແມ່ນ 1 ຖ້າ expr1 ຫຼາຍກວ່າ ຫຼືເທົ່າກັບ expr2.
expr1 == expr2
ຜົນໄດ້ຮັບແມ່ນ 1 ຖ້າ expr1 ເທົ່າກັບ expr2.
expr1 != expr2
ຜົນໄດ້ຮັບແມ່ນ 1 ຖ້າ expr1 ບໍ່ເທົ່າກັບ expr2.
ການດໍາເນີນງານຂອງ Boolean ແມ່ນຍັງຖືກກົດຫມາຍ. (POSIX bc ບໍ່ມີການດໍາເນີນງານ boolean). ໄດ້
ຜົນໄດ້ຮັບຂອງການດໍາເນີນການ boolean ທັງຫມົດແມ່ນ 0 ແລະ 1 (ສໍາລັບ false ແລະ true) ໃນ relational
ການສະແດງອອກ. ຕົວປະຕິບັດການ boolean ແມ່ນ:
!expr ຜົນໄດ້ຮັບແມ່ນ 1 ຖ້າ expr ແມ່ນ 0.
expr && expr
ຜົນໄດ້ຮັບແມ່ນ 1 ຖ້າທັງສອງສະແດງອອກບໍ່ແມ່ນສູນ.
expr || expr
ຜົນໄດ້ຮັບແມ່ນ 1 ຖ້າທັງສອງສະແດງອອກບໍ່ແມ່ນສູນ.
ຄວາມສຳຄັນຂອງການສະແດງຜົນມີດັ່ງນີ້: (ຕ່ຳສຸດຫາສູງສຸດ)
|| ຜູ້ປະກອບການ, ສະມາຄົມຊ້າຍ
&& ຜູ້ປະກອບການ, ສະມາຄົມຊ້າຍ
! ຜູ້ປະກອບການ, nonassociative
ຕົວປະຕິບັດການທີ່ກ່ຽວຂ້ອງ, ສະມາຄົມຊ້າຍ
ຜູ້ປະຕິບັດການມອບຫມາຍ, ສະມາຄົມທີ່ຖືກຕ້ອງ
+ ແລະ - ຜູ້ປະກອບການ, ສະມາຄົມຊ້າຍ
*, / ແລະ % operators, left associative
^ ຜູ້ປະກອບການ, ສະມາຄົມທີ່ຖືກຕ້ອງ
unary - operator, nonassociative
++ ແລະ -- operators, nonassociative
ຄວາມສຳຄັນນີ້ຖືກເລືອກເພື່ອໃຫ້ສອດຄ່ອງກັບ POSIX bc ໂຄງການຈະດໍາເນີນການຢ່າງຖືກຕ້ອງ. ນີ້
ຈະເຮັດໃຫ້ການນໍາໃຊ້ຕົວປະຕິບັດການທີ່ກ່ຽວຂ້ອງແລະເຫດຜົນມີພຶດຕິກໍາທີ່ຜິດປົກກະຕິບາງຢ່າງ
ເມື່ອໃຊ້ກັບສຳນວນການມອບໝາຍ. ພິຈາລະນາການສະແດງອອກ:
a = 3 < 5
ຜູ້ຂຽນໂປລແກລມ C ສ່ວນໃຫຍ່ຈະສົມມຸດວ່ານີ້ຈະມອບຜົນໄດ້ຮັບຂອງ "3 < 5" (ຄ່າ 1) ໃຫ້ກັບ.
ຕົວແປ "a". ອັນນີ້ເຮັດຫຍັງ bc ແມ່ນມອບຄ່າ 3 ໃຫ້ກັບຕົວແປ "a" ແລະຫຼັງຈາກນັ້ນ
ປຽບທຽບ 3 ຫາ 5. ມັນດີທີ່ສຸດທີ່ຈະໃຊ້ວົງເລັບເມື່ອໃຊ້ຕົວປະຕິບັດການທີ່ກ່ຽວຂ້ອງ ແລະເຫດຜົນ
ກັບຜູ້ປະຕິບັດການມອບຫມາຍ.
ມີບາງສຳນວນພິເສດເພີ່ມເຕີມທີ່ສະໜອງໃຫ້ຢູ່ໃນ bc. ສິ່ງເຫຼົ່ານີ້ຕ້ອງເຮັດດ້ວຍ
ຫນ້າທີ່ກໍານົດຂອງຜູ້ໃຊ້ແລະຫນ້າທີ່ມາດຕະຖານ. ພວກເຂົາທັງຫມົດປະກົດວ່າ "ຊື່(ພາລາມິເຕີ)".
ເບິ່ງພາກສ່ວນກ່ຽວກັບຫນ້າທີ່ສໍາລັບຫນ້າທີ່ກໍານົດຂອງຜູ້ໃຊ້. ຫນ້າທີ່ມາດຕະຖານແມ່ນ:
ຄວາມຍາວ (ສະແດງອອກ)
ຄ່າຂອງຟັງຊັນຄວາມຍາວແມ່ນຈໍານວນຕົວເລກທີ່ສໍາຄັນໃນ
ການສະແດງອອກ.
ອ່ານ ( )
ຟັງຊັນການອ່ານ (ສ່ວນຂະຫຍາຍ) ຈະອ່ານຕົວເລກຈາກການປ້ອນມາດຕະຖານ,
ໂດຍບໍ່ຄໍານຶງເຖິງບ່ອນທີ່ຫນ້າທີ່ເກີດຂຶ້ນ. ລະວັງ, ນີ້ສາມາດເຮັດໃຫ້ເກີດບັນຫາກັບ
ການປະສົມຂອງຂໍ້ມູນແລະໂຄງການໃນການປ້ອນຂໍ້ມູນມາດຕະຖານ. ການນໍາໃຊ້ທີ່ດີທີ່ສຸດສໍາລັບຫນ້າທີ່ນີ້
ແມ່ນຢູ່ໃນໂຄງການທີ່ຂຽນໄວ້ກ່ອນຫນ້ານີ້ທີ່ຕ້ອງການການປ້ອນຂໍ້ມູນຈາກຜູ້ໃຊ້, ແຕ່ບໍ່ເຄີຍອະນຸຍາດໃຫ້
ລະຫັດໂຄງການທີ່ຈະໄດ້ຮັບການປ້ອນຂໍ້ມູນຈາກຜູ້ໃຊ້. ຄ່າຂອງຟັງຊັນອ່ານແມ່ນ
ຕົວເລກທີ່ອ່ານຈາກວັດສະດຸປ້ອນມາດຕະຖານໂດຍໃຊ້ຄ່າປັດຈຸບັນຂອງຕົວແປ ອິເບສ
ສໍາລັບພື້ນຖານການແປງ.
ຂະຫນາດ (ການສະແດງອອກ)
ຄ່າຂອງຟັງຊັນຂະໜາດແມ່ນຕົວເລກຫຼັງຈາກຈຸດທົດສະນິຍົມໃນ
ການສະແດງອອກ.
sqrt (ສະແດງອອກ)
ຄ່າຂອງຟັງຊັນ sqrt ແມ່ນຮາກທີ່ສອງຂອງການສະແດງຜົນ. ຖ້າ
ການສະແດງອອກແມ່ນເປັນລົບ, ຄວາມຜິດພາດທີ່ໃຊ້ເວລາແລ່ນແມ່ນຖືກສ້າງຂຶ້ນ.
ຖະແຫຼງການ
ຖະແຫຼງການ (ໃນພາສາອັນຍະມະນີສ່ວນໃຫຍ່) ສະໜອງການຈັດລໍາດັບການສະແດງອອກ
ການປະເມີນຜົນ. ໃນ bc ຖະແຫຼງການຖືກປະຕິບັດ "ໄວເທົ່າທີ່ຈະໄວໄດ້." ການປະຕິບັດເກີດຂຶ້ນໃນເວລາທີ່
ແຖວໃໝ່ທີ່ພົບແລະມີໜຶ່ງ ຫຼືຫຼາຍກວ່າຄຳຖະແຫຼງທີ່ສົມບູນ. ເນື່ອງຈາກນີ້
ການປະຕິບັດທັນທີທັນໃດ, newlines ມີຄວາມສໍາຄັນຫຼາຍໃນ bc. ໃນຄວາມເປັນຈິງ, ທັງ semicolon ແລະ a
ແຖວໃໝ່ຖືກໃຊ້ເປັນຕົວແຍກຄຳຖະແຫຼງ. ແຖວໃໝ່ທີ່ວາງໄວ້ບໍ່ຖືກຕ້ອງຈະເຮັດໃຫ້ ກ
syntax ຜິດພາດ. ເນື່ອງຈາກວ່າເສັ້ນໃຫມ່ແມ່ນຕົວແຍກຄໍາຖະແຫຼງການ, ມັນເປັນໄປໄດ້ທີ່ຈະເຊື່ອງເສັ້ນໃຫມ່
ໂດຍໃຊ້ຕົວອັກສອນ backslash. ລໍາດັບ "\ ", ທີ່ ແຖວໃໝ່ປະກົດຂຶ້ນ
to bc ເປັນຊ່ອງຫວ່າງແທນແຖວໃໝ່. ບັນຊີລາຍຊື່ຄໍາຖະແຫຼງການເປັນຊຸດຂອງຄໍາຖະແຫຼງການ
ແຍກດ້ວຍເຄື່ອງໝາຍຈຸດ ແລະແຖວໃໝ່. ຕໍ່ໄປນີ້ແມ່ນບັນຊີລາຍຊື່ຂອງ bc ຖະແຫຼງການແລະສິ່ງທີ່
ພວກເຂົາເຈົ້າເຮັດ: (ສິ່ງທີ່ຢູ່ໃນວົງເລັບ ([]) ແມ່ນສ່ວນທາງເລືອກຂອງຄໍາຖະແຫຼງການ.)
ການສະແດງອອກ
ຄໍາຖະແຫຼງນີ້ເຮັດຫນຶ່ງໃນສອງຢ່າງ. ຖ້າການສະແດງອອກເລີ່ມຕົ້ນດ້ວຍ "
... ... ", ມັນຈະໄດ້ຮັບການພິຈາລະນາເປັນຄໍາສັ່ງການມອບຫມາຍຖ້າຫາກວ່າ
ການສະແດງອອກບໍ່ແມ່ນຄໍາຖະແຫຼງການມອບຫມາຍ, ການສະແດງອອກໄດ້ຖືກປະເມີນແລະພິມອອກ
ກັບຜົນຜະລິດ. ຫຼັງຈາກພິມຕົວເລກແລ້ວ, ແຖວໃໝ່ຈະຖືກພິມ. ຍົກຕົວຢ່າງ,
"a = 1" ແມ່ນຄໍາຖະແຫຼງການມອບຫມາຍແລະ "(a = 1)" ແມ່ນຄໍາເວົ້າທີ່ມີການຝັງຕົວ.
ການມອບໝາຍ. ຕົວເລກທັງຫມົດທີ່ພິມອອກແມ່ນພິມຢູ່ໃນພື້ນຖານທີ່ລະບຸໄວ້ໂດຍ
ຕົວແປ ເຈົ້ານາຍ. ຄຸນຄ່າທາງກົດໝາຍສຳລັບ ເຈົ້ານາຍ ແມ່ນ 2 ຫາ BC_BASE_MAX. (ເບິ່ງ
section LIMITS.) ສໍາລັບຖານ 2 ເຖິງ 16, ວິທີການຂຽນຕົວເລກປົກກະຕິແມ່ນ
ໃຊ້. ສໍາລັບພື້ນຖານທີ່ໃຫຍ່ກວ່າ 16, bc ໃຊ້ວິທີການຕົວເລກຫຼາຍຕົວອັກສອນ
ການພິມຕົວເລກທີ່ແຕ່ລະຕົວເລກຖານທີ່ສູງກວ່າຈະຖືກພິມເປັນຕົວເລກຖານ 10.
ຕົວເລກຫຼາຍຕົວອັກສອນຖືກແຍກອອກດ້ວຍຍະຫວ່າງ. ແຕ່ລະຕົວເລກມີຕົວເລກ
ຕົວອັກສອນທີ່ຕ້ອງການເພື່ອສະແດງຄ່າພື້ນຖານສິບຂອງ "obase-1". ນັບຕັ້ງແຕ່ຕົວເລກ
ມີຄວາມແມ່ນຍໍາໂດຍຕົນເອງ, ບາງຕົວເລກອາດຈະບໍ່ສາມາດພິມໄດ້ໃນຜົນໄດ້ຮັບດຽວ
ສາຍ. ຕົວເລກຍາວເຫຼົ່ານີ້ຈະຖືກແບ່ງອອກເປັນແຖວໂດຍໃຊ້ "\" ເປັນຕົວສຸດທ້າຍ
ຕົວລະຄອນໃນແຖວ. ຈໍານວນສູງສຸດຂອງຕົວອັກສອນທີ່ພິມຕໍ່ແຖວແມ່ນ 70. ເນື່ອງຈາກ
ກັບລັກສະນະການໂຕ້ຕອບຂອງ bc, ການພິມຈໍານວນເຮັດໃຫ້ຜົນກະທົບຂ້າງຄຽງຂອງ
ກຳນົດຄ່າທີ່ພິມອອກໃຫ້ກັບຕົວແປພິເສດ ສຸດທ້າຍ. ນີ້ອະນຸຍາດໃຫ້ຜູ້ໃຊ້
ກູ້ຄ່າສຸດທ້າຍທີ່ພິມອອກໂດຍບໍ່ຈໍາເປັນຕ້ອງພິມຂໍ້ຄວາມທີ່ພິມຄືນໃໝ່
ຈໍານວນ. ມອບໝາຍໃຫ້ ສຸດທ້າຍ ແມ່ນຖືກຕ້ອງຕາມກົດໝາຍ ແລະຈະຂຽນທັບຄ່າທີ່ພິມຫຼ້າສຸດ
ດ້ວຍຄ່າທີ່ໄດ້ຮັບມອບໝາຍ. ຄ່າທີ່ໄດ້ຮັບມອບໝາຍໃໝ່ຈະຍັງຄົງຢູ່ຈົນຮອດຄັ້ງຕໍ່ໄປ
ຕົວເລກຖືກພິມອອກຫຼືຄ່າອື່ນຖືກມອບຫມາຍໃຫ້ ສຸດທ້າຍ. (ບາງການຕິດຕັ້ງອາດຈະ
ອະນຸຍາດໃຫ້ໃຊ້ໄລຍະເວລາດຽວ (.) ທີ່ບໍ່ແມ່ນສ່ວນຫນຶ່ງຂອງຕົວເລກເປັນມືສັ້ນ
ຫມາຍເຫດສໍາລັບ ສຸດທ້າຍ.)
string ສະຕິງຖືກພິມອອກໄປຫາຜົນໄດ້ຮັບ. ສະຕຣິງເລີ່ມຕົ້ນດ້ວຍຕົວອັກສອນຄູ່
ແລະມີຕົວອັກສອນທັງໝົດຈົນຮອດຕົວອັກສອນທີ່ອ້າງອີງຄູ່ຕໍ່ໄປ. ຕົວອັກສອນທັງໝົດ
ແມ່ນໃຊ້ເວລາຮູ້ຫນັງສື, ລວມທັງເສັ້ນໃຫມ່ໃດໆ. ບໍ່ມີການພິມຕົວອັກສອນແຖວໃໝ່ຕາມຫຼັງ
ຊ່ອຍແນ່.
ພິມ ບັນຊີລາຍຊື່
ຄໍາຖະແຫຼງການພິມ (ການຂະຫຍາຍ) ສະຫນອງວິທີການຜົນຜະລິດອື່ນ. "ບັນຊີລາຍຊື່"
ແມ່ນລາຍຊື່ຂອງສະຕຣິງ ແລະການສະແດງຜົນທີ່ແຍກອອກດ້ວຍເຄື່ອງໝາຍຈຸດ. ແຕ່ລະສາຍຫຼື
ການສະແດງອອກແມ່ນພິມອອກຕາມລໍາດັບຂອງບັນຊີລາຍຊື່. ບໍ່ມີການພິມສິ້ນສຸດແຖວໃໝ່.
ການສະແດງອອກໄດ້ຖືກປະເມີນແລະມູນຄ່າຂອງພວກມັນຖືກພິມອອກແລະມອບຫມາຍໃຫ້ຕົວແປ
ສຸດທ້າຍ. Strings ໃນຄໍາຖະແຫຼງການພິມຖືກພິມອອກໄປຫາຜົນໄດ້ຮັບແລະອາດຈະມີ
ລັກສະນະພິເສດ. ຕົວອັກສອນພິເສດເລີ່ມຕົ້ນດ້ວຍຕົວອັກສອນ backslash (\).
ລັກສະນະພິເສດທີ່ຮັບຮູ້ໂດຍ bc ແມ່ນ "a" (ເຕືອນຫຼືກະດິ່ງ), "b" (backspace),
"f" (ອາຫານແບບຟອມ), "n" (ແຖວໃຫມ່), "r" (ການສົ່ງຄືນ carriage), "q" (ວົງຢືມຄູ່), "t"
(tab), ແລະ "\" (backslash). ລັກສະນະອື່ນໆທີ່ປະຕິບັດຕາມ backslash ຈະເປັນ
ບໍ່ສົນໃຈ.
{ statement_list }
ນີ້ແມ່ນ ຄຳ ຖະແຫຼງການປະສົມ. ມັນອະນຸຍາດໃຫ້ຫຼາຍຄໍາຖະແຫຼງທີ່ຈະຈັດກຸ່ມ
ຮ່ວມກັນສໍາລັບການປະຕິບັດ.
if ( expression ) statement1 [ອື່ນ ຖະແຫຼງການ 2]
ຖະແຫຼງການ if ປະເມີນການສະແດງອອກ ແລະປະຕິບັດຄໍາຖະແຫຼງທີ່ 1 ຫຼືຄໍາຖະແຫຼງທີ່ 2
ຂຶ້ນກັບມູນຄ່າຂອງການສະແດງຜົນ. ຖ້າການສະແດງອອກບໍ່ແມ່ນສູນ,
ຄໍາຖະແຫຼງທີ່ 1 ຖືກປະຕິບັດ. ຖ້າ statement2 ແມ່ນປະຈຸບັນ ແລະຄ່າຂອງ expression
ແມ່ນ 0, ຫຼັງຈາກນັ້ນ statement2 ຖືກປະຕິບັດ. (ຂໍ້ອື່ນແມ່ນການຂະຫຍາຍ.)
ໃນຂະນະທີ່ ( expression ) ຄໍາຖະແຫຼງການ
ຖະແຫຼງການໃນຂະນະທີ່ຈະດໍາເນີນການຖະແຫຼງການໃນຂະນະທີ່ການສະແດງອອກບໍ່ແມ່ນສູນ.
ມັນປະເມີນການສະແດງອອກກ່ອນທີ່ຈະປະຕິບັດແຕ່ລະຄໍາຖະແຫຼງການ. ການຢຸດເຊົາ
ຂອງ loop ແມ່ນເກີດມາຈາກຄ່າການສະແດງອອກເປັນສູນຫຼືການປະຕິບັດການຢຸດ
ຄໍາຖະແຫຼງທີ່.
ສໍາລັບການ ( [expression1] ; [expression2] ; [expression3] ) ຖະແຫຼງການ
ສໍາລັບຄໍາຖະແຫຼງທີ່ຄວບຄຸມການປະຕິບັດຄໍາຖະແຫຼງທີ່ຊ້ໍາກັນ. ການສະແດງອອກ 1 ແມ່ນ
ປະເມີນກ່ອນທີ່ຈະ loop ໄດ້. Expression2 ຖືກປະເມີນກ່ອນການປະຕິບັດແຕ່ລະອັນ
ຖະແຫຼງການ. ຖ້າມັນບໍ່ແມ່ນສູນ, ຖະແຫຼງການຈະຖືກປະເມີນ. ຖ້າມັນເປັນສູນ, loop
ຖືກຢຸດຕິ. ຫຼັງຈາກການປະຕິບັດແຕ່ລະຄໍາຖະແຫຼງການ, expression3 ຖືກປະເມີນ
ກ່ອນການປະເມີນຜົນການສະແດງອອກຄືນໃຫມ່ 2. ຖ້າ expression1 ຫຼື expression3 ຫາຍໄປ,
ບໍ່ມີຫຍັງຖືກປະເມີນຢູ່ໃນຈຸດທີ່ເຂົາເຈົ້າຈະຖືກປະເມີນ. ຖ້າ expression2 ແມ່ນ
ຂາດ, ມັນຄືກັນກັບການທົດແທນຄ່າ 1 ສໍາລັບ expression2. (ທາງເລືອກ
ການສະແດງອອກແມ່ນສ່ວນຂະຫຍາຍ. POSIX bc ຮຽກຮ້ອງໃຫ້ມີສາມສະແດງອອກ.) ໄດ້
ຕໍ່ໄປນີ້ແມ່ນລະຫັດທຽບເທົ່າສໍາລັບຄໍາຖະແຫຼງການ:
expression1;
ໃນຂະນະທີ່ (expression2) {
ຖະແຫຼງການ;
expression3;
}
ພັກຜ່ອນ ຄໍາຖະແຫຼງການນີ້ເຮັດໃຫ້ເກີດການບັງຄັບໃຫ້ອອກຈາກການປິດລ້ອມຫຼ້າສຸດໃນຂະນະທີ່ຄໍາຖະແຫຼງການຫຼື
ສໍາລັບຄໍາຖະແຫຼງການ.
ດໍາເນີນການຕໍ່
ຄໍາຖະແຫຼງການສືບຕໍ່ (ການຂະຫຍາຍ) ເຮັດໃຫ້ເກີດການປິດລ້ອມຫຼ້າສຸດສໍາລັບ
ຄໍາຖະແຫຼງທີ່ຈະເລີ່ມຕົ້ນການ iteration ຕໍ່ໄປ.
ຢຸດຕິ ຄໍາຖະແຫຼງການຢຸດ (ການຂະຫຍາຍ) ແມ່ນຄໍາຖະແຫຼງທີ່ປະຕິບັດທີ່ເຮັດໃຫ້ເກີດການ bc
ໂຮງງານຜະລິດທີ່ຈະເຊົາພຽງແຕ່ເມື່ອມັນຖືກປະຕິບັດ. ຕົວຢ່າງ, "ຖ້າ (0 == 1) halt" ຈະ
ບໍ່ແມ່ນສາເຫດ bc ທີ່ຈະຢຸດເຊົາເນື່ອງຈາກວ່າການຢຸດບໍ່ໄດ້ປະຕິບັດ.
ການກັບຄືນມາ ສົ່ງຄ່າ 0 ຈາກຟັງຊັນໃດໜຶ່ງ. (ເບິ່ງພາກສ່ວນກ່ຽວກັບຫນ້າທີ່.)
ການກັບຄືນມາ (ການສະແດງອອກ)
ສົ່ງຄ່າຂອງການສະແດງຜົນຈາກຟັງຊັນໃດໜຶ່ງ. (ເບິ່ງພາກກ່ຽວກັບ
functions.) ໃນຖານະເປັນການຂະຫຍາຍ, ວົງເລັບແມ່ນບໍ່ຈໍາເປັນ.
PSEUDO ຖະແຫຼງການ
ຄໍາຖະແຫຼງເຫຼົ່ານີ້ບໍ່ແມ່ນຄໍາຖະແຫຼງໃນຄວາມຫມາຍພື້ນເມືອງ. ພວກເຂົາບໍ່ໄດ້ຖືກປະຕິບັດ
ຖະແຫຼງການ. ຫນ້າທີ່ຂອງພວກເຂົາແມ່ນປະຕິບັດໃນເວລາ "ລວບລວມ".
ຂໍ້ຈໍາກັດ ພິມຂອບເຂດຈໍາກັດທ້ອງຖິ່ນບັງຄັບໃຊ້ໂດຍສະບັບທ້ອງຖິ່ນຂອງ bc. ນີ້ແມ່ນການຂະຫຍາຍ.
ເຊົາ ເມື່ອ ຄຳ ຖະແຫຼງການເຊົາຖືກອ່ານ, the bc ໂຮງງານຜະລິດຖືກປິດ, ບໍ່ວ່າຈະເປັນ
ບ່ອນທີ່ຄໍາຖະແຫຼງການອອກໄດ້ຖືກພົບເຫັນ. ຕົວຢ່າງ, "ຖ້າ (0 == 1) ເຊົາ" ຈະເຮັດໃຫ້ bc
ສິ້ນສຸດລົງ.
ການຮັບປະກັນ
ພິມແຈ້ງການຮັບປະກັນທີ່ຍາວກວ່າ. ນີ້ແມ່ນການຂະຫຍາຍ.
FUNCTIONS
ຟັງຊັນໃຫ້ວິທີການກໍານົດການຄໍານວນທີ່ສາມາດດໍາເນີນການຕໍ່ມາ.
ຟັງຊັນໃນ bc ສະເຫມີຄິດໄລ່ມູນຄ່າແລະສົ່ງຄືນໃຫ້ຜູ້ໂທ. ຄໍານິຍາມຫນ້າທີ່
ແມ່ນ "ແບບເຄື່ອນໄຫວ" ໃນຄວາມ ໝາຍ ວ່າຟັງຊັນບໍ່ໄດ້ຖືກ ກຳ ນົດຈົນກວ່າຈະພົບ ຄຳ ນິຍາມ
ໃນການປ້ອນຂໍ້ມູນ. ຫຼັງຈາກນັ້ນ, ຄໍານິຍາມນັ້ນຖືກນໍາໃຊ້ຈົນກ່ວາຟັງຊັນຄໍານິຍາມອື່ນສໍາລັບການດຽວກັນ
ຊື່ແມ່ນພົບ. ຈາກນັ້ນຄຳນິຍາມໃໝ່ແທນຄຳນິຍາມເກົ່າ. ຫນ້າທີ່
ໄດ້ຖືກກໍານົດດັ່ງຕໍ່ໄປນີ້:
ກໍານົດ ຊື່ ( ພາລາມິເຕີ ) { ແຖວໃໝ່
auto_list statement_list }
ການເອີ້ນຟັງຊັນແມ່ນພຽງແຕ່ການສະແດງອອກຂອງແບບຟອມ "ຊື່(ພາລາມິເຕີ)".
ພາລາມິເຕີແມ່ນຕົວເລກຫຼືອາເຣ (ສ່ວນຂະຫຍາຍ). ໃນນິຍາມຟັງຊັນ, ສູນ ຫຼືຫຼາຍກວ່ານັ້ນ
ພາລາມິເຕີແມ່ນຖືກກໍານົດໂດຍລາຍຊື່ຊື່ຂອງພວກມັນແຍກດ້ວຍເຄື່ອງໝາຍຈຸດ. ຕົວກໍານົດການທັງຫມົດແມ່ນ
ໂທຫາໂດຍຄ່າຕົວກໍານົດການ. Arrays ຖືກລະບຸໄວ້ໃນຄໍານິຍາມພາລາມິເຕີໂດຍ
ຫມາຍເຫດ "ຊື່[]". ໃນການເອີ້ນຟັງຊັນ, ຕົວກໍານົດການຕົວຈິງແມ່ນການສະແດງອອກເຕັມສໍາລັບ
ຕົວກໍານົດການຕົວເລກ. ຫມາຍເຫດດຽວກັນແມ່ນໃຊ້ສໍາລັບການຖ່າຍທອດ arrays ສໍາລັບການກໍານົດ array
ຕົວກໍານົດການ. array ທີ່ມີຊື່ແມ່ນສົ່ງຜ່ານຄ່າໄປຫາຟັງຊັນ. ນັບຕັ້ງແຕ່ການທໍາງານ
ຄໍານິຍາມແມ່ນແບບເຄື່ອນໄຫວ, ຕົວເລກພາລາມິເຕີແລະປະເພດຖືກກວດສອບເມື່ອຟັງຊັນ
ເອີ້ນວ່າ. ບໍ່ກົງກັນໃນຈໍານວນ ຫຼືປະເພດຂອງພາລາມິເຕີຈະເຮັດໃຫ້ເກີດຄວາມຜິດພາດ runtime. ກ
runtime error ຍັງຈະເກີດຂຶ້ນສໍາລັບການໂທຫາຫນ້າທີ່ບໍ່ໄດ້ກໍານົດ.
ໄດ້ auto_list ແມ່ນບັນຊີລາຍຊື່ທາງເລືອກຂອງຕົວແປທີ່ສໍາລັບການນໍາໃຊ້ "ທ້ອງຖິ່ນ". syntax ຂອງ
ບັນຊີລາຍຊື່ອັດຕະໂນມັດ (ຖ້າມີ) ແມ່ນ "ອັດຕະໂນມັດ ຊື່, ... ;”. (ເຄື່ອງໝາຍຈຸດເປັນທາງເລືອກ.) ຊື່
ແມ່ນຊື່ຂອງຕົວແປອັດຕະໂນມັດ. Arrays ອາດຈະຖືກກໍານົດໂດຍການໃຊ້ຫມາຍເຫດດຽວກັນກັບ
ໃຊ້ໃນພາລາມິເຕີ. ຕົວແປເຫຼົ່ານີ້ມີມູນຄ່າຂອງພວກມັນຖືກກົດໃສ່ stack ໃນຕອນເລີ່ມຕົ້ນ
ຫນ້າທີ່. ຫຼັງຈາກນັ້ນ, ຕົວແປແມ່ນເລີ່ມຕົ້ນເປັນສູນແລະຖືກນໍາໃຊ້ຕະຫຼອດ
ການປະຕິບັດຫນ້າທີ່. ໃນເວລາອອກຈາກຟັງຊັນ, ຕົວແປເຫຼົ່ານີ້ຖືກປະກົດຂຶ້ນເພື່ອວ່າ
ຄ່າຕົ້ນສະບັບ (ໃນເວລາເອີ້ນຟັງຊັນ) ຂອງຕົວແປເຫຼົ່ານີ້ຖືກຟື້ນຟູຄືນມາ. ໄດ້
ພາລາມິເຕີແມ່ນຕົວແປອັດຕະໂນມັດທີ່ແທ້ຈິງທີ່ຖືກເລີ່ມຕົ້ນເປັນມູນຄ່າທີ່ສະຫນອງໃຫ້ຢູ່ໃນ
ໂທຟັງຊັນ. ຕົວແປອັດຕະໂນມັດແມ່ນແຕກຕ່າງຈາກຕົວແປທ້ອງຖິ່ນແບບດັ້ງເດີມເພາະວ່າຖ້າ
ຟັງຊັນ A ເອີ້ນຟັງຊັນ B, B ອາດຈະເຂົ້າເຖິງຕົວແປອັດຕະໂນມັດຂອງຟັງຊັນ A ໂດຍພຽງແຕ່ໃຊ້ຕົວແປ
ຊື່ດຽວກັນ, ເວັ້ນເສຍແຕ່ວ່າຫນ້າທີ່ B ໄດ້ເອີ້ນພວກເຂົາວ່າຕົວແປອັດຕະໂນມັດ. ເນື່ອງຈາກຄວາມຈິງທີ່ວ່າອັດຕະໂນມັດ
ຕົວແປແລະພາລາມິເຕີແມ່ນ pushed ໃສ່ stack, bc ສະຫນັບສະຫນູນຫນ້າທີ່ recursive.
ຮ່າງກາຍຂອງຫນ້າທີ່ເປັນບັນຊີລາຍຊື່ຂອງ bc ຖະແຫຼງການ. ອີກເທື່ອ ໜຶ່ງ, ຄຳ ຖະແຫຼງທີ່ແຍກອອກໂດຍ
ຈໍ້າຈຸດ ຫຼືແຖວໃໝ່. ຖະແຫຼງການກັບຄືນເຮັດໃຫ້ເກີດການຢຸດເຊົາການທໍາງານແລະ
ຜົນຕອບແທນຂອງມູນຄ່າ. ມີສອງສະບັບຂອງຄໍາຖະແຫຼງການກັບຄືນ. ຮູບແບບທໍາອິດ,
"ການກັບຄືນມາ", ຕອບຄ່າ 0 ໄປຫາການສະແດງຜົນການໂທ. ຮູບແບບທີສອງ, "ການກັບຄືນມາ (
ການສະແດງອອກ )", ຄິດໄລ່ຄ່າຂອງການສະແດງຜົນ ແລະສົ່ງຄືນຄ່ານັ້ນໃຫ້ກັບການໂທ
ການສະແດງອອກ. ມີຄວາມໝາຍວ່າ "ການກັບຄືນມາ (0)" ໃນຕອນທ້າຍຂອງທຸກໆຫນ້າທີ່. ນີ້ອະນຸຍາດໃຫ້ a
ຟັງຊັນເພື່ອຢຸດແລະສົ່ງຄືນ 0 ໂດຍບໍ່ມີການແຈ້ງຜົນຕອບແທນທີ່ຊັດເຈນ.
ຟັງຊັນຍັງປ່ຽນການໃຊ້ຕົວແປ ອິເບສ. ຄົງທີ່ທັງໝົດຢູ່ໃນຮ່າງກາຍຂອງການເຮັດວຽກ
ຈະຖືກປ່ຽນໂດຍໃຊ້ຄ່າຂອງ ອິເບສ ໃນເວລາໂທຟັງຊັນ. ການປ່ຽນແປງຂອງ
ອິເບສ ຈະຖືກລະເລີຍໃນລະຫວ່າງການປະຕິບັດຫນ້າທີ່ຍົກເວັ້ນມາດຕະຖານ
ຫນ້າທີ່ ອ່ານ, ເຊິ່ງຈະໃຊ້ຄ່າປະຈຸບັນຂອງ ອິເບສ ສໍາລັບການປ່ຽນຕົວເລກ.
ສ່ວນຂະຫຍາຍຫຼາຍອັນໄດ້ຖືກເພີ່ມເຂົ້າໃນຫນ້າທີ່. ຫນ້າທໍາອິດ, ຮູບແບບຂອງຄໍານິຍາມມີ
ໄດ້ຜ່ອນຄາຍເລັກນ້ອຍ. ມາດຕະຖານຮຽກຮ້ອງໃຫ້ມີວົງເລັບເປີດຢູ່ໃນເສັ້ນດຽວກັນກັບ
ກໍານົດ ຄໍາສໍາຄັນແລະທຸກພາກສ່ວນອື່ນໆຕ້ອງຢູ່ໃນແຖວຕໍ່ໄປນີ້. ສະບັບນີ້ຂອງ bc ຈະ
ອະນຸຍາດໃຫ້ຈໍານວນຂອງສາຍໃຫມ່ໃດຫນຶ່ງກ່ອນແລະຫຼັງຈາກວົງເລັບເປີດຂອງຫນ້າທີ່. ສໍາລັບ
ຕົວຢ່າງ, ຄໍານິຍາມຕໍ່ໄປນີ້ແມ່ນຖືກຕ້ອງຕາມກົດໝາຍ.
ກໍານົດ d (n) { return (2*n); }
ນິຍາມ d (n)
{ ກັບຄືນ (2*n); }
ຫນ້າທີ່ອາດຈະຖືກກໍານົດເປັນ void. ຟັງຊັນ void ກັບຄືນມາບໍ່ມີຄ່າ ແລະດັ່ງນັ້ນອາດຈະບໍ່ເປັນ
ໃຊ້ໃນສະຖານທີ່ໃດກໍໄດ້ທີ່ຕ້ອງການຄ່າ. ຟັງຊັນ void ບໍ່ຜະລິດຜົນຜະລິດໃດໆໃນເວລາທີ່
ເອີ້ນດ້ວຍຕົວມັນເອງໃນແຖວປ້ອນຂໍ້ມູນ. ຄໍາສໍາຄັນ void ຖືກຈັດໃສ່ລະຫວ່າງຄໍາສໍາຄັນ
ກໍານົດ ແລະຊື່ຟັງຊັນ. ຕົວຢ່າງ, ພິຈາລະນາກອງປະຊຸມຕໍ່ໄປນີ້.
ກໍານົດ py (y) { ພິມ "--->", y, "<---", "\n"; }
ກໍານົດ void px (x) { ພິມ "--->", x, "<--", "\n"; }
py(1)
--->1<---
0
px(1)
--->1<---
ນັບຕັ້ງແຕ່ py ບໍ່ແມ່ນການທໍາງານເປັນໂມຄະ, ການໂທຂອງ py(1) ພິມຜົນຜະລິດທີ່ຕ້ອງການແລະຫຼັງຈາກນັ້ນ
ພິມແຖວທີສອງທີ່ເປັນຄ່າຂອງຟັງຊັນ. ນັບຕັ້ງແຕ່ມູນຄ່າຂອງຫນ້າທີ່
ທີ່ບໍ່ໄດ້ໃຫ້ຄໍາຖະແຫຼງການກັບຄືນມາຢ່າງຈະແຈ້ງແມ່ນສູນ, ສູນຈະຖືກພິມອອກ. ສໍາລັບ px(1),
ບໍ່ມີສູນຖືກພິມອອກເພາະວ່າຟັງຊັນເປັນຟັງຊັນທີ່ເປັນໂມຄະ.
ນອກຈາກນັ້ນ, ການໂທໂດຍຕົວແປສໍາລັບ arrays ໄດ້ຖືກເພີ່ມ. ເພື່ອປະກາດການໂທໂດຍ array ຕົວປ່ຽນແປງ, the
ການປະກາດພາລາມິເຕີ array ໃນຄໍານິຍາມຟັງຊັນເບິ່ງຄືວ່າ "*ຊື່[]"
call to the function ຍັງຄົງຄືກັນກັບ call by value arrays.
MATH ຫໍສະຫມຸດ
If bc ແມ່ນ invoked ກັບ -l ທາງເລືອກ, ຫ້ອງສະຫມຸດຄະນິດສາດແມ່ນ preloaded ແລະຂະຫນາດເລີ່ມຕົ້ນແມ່ນ
ກໍານົດເປັນ 20. ຫນ້າທີ່ທາງຄະນິດສາດຈະຄິດໄລ່ຜົນໄດ້ຮັບຂອງພວກເຂົາກັບຂະຫນາດທີ່ກໍານົດໄວ້ໃນເວລາ
ຂອງການເອີ້ນຂອງເຂົາເຈົ້າ. ຫ້ອງສະຫມຸດຄະນິດສາດກໍານົດຫນ້າທີ່ດັ່ງຕໍ່ໄປນີ້:
s (x) ໄຊນຂອງ x, x ເປັນເຣດຽນ.
ຄ (x) ໂຄຊິນຂອງ x, x ແມ່ນເປັນເຣດຽນ.
ເຖິງ (x) arctangent ຂອງ x, arctangent ໃຫ້ຜົນເປັນເຣດຽນ.
l (x) logarithm ທໍາມະຊາດຂອງ x.
e (x) ການທໍາງານຂອງ exponential ຂອງການລ້ຽງ e ກັບຄ່າ x.
j (n,x)
ຟັງຊັນ Bessel ຂອງ integer order n ຂອງ x.
ຕົວຢ່າງ
In / ຖັງ / sh, ຕໍ່ໄປນີ້ຈະກໍານົດຄ່າຂອງ "pi" ໃຫ້ກັບຕົວແປຂອງ shell pi.
pi=$(echo "scale=10; 4*a(1)" | bc -l)
ຕໍ່ໄປນີ້ແມ່ນຄໍານິຍາມຂອງຟັງຊັນ exponential ທີ່ໃຊ້ໃນຫ້ອງສະຫມຸດຄະນິດສາດ.
ຟັງຊັນນີ້ຖືກຂຽນໄວ້ໃນ POSIX bc.
ຂະໜາດ = 20
/* ໃຊ້ຄວາມຈິງທີ່ວ່າ e^x = (e^(x/2))^2
ເມື່ອ x ມີຂະຫນາດນ້ອຍພຽງພໍ, ພວກເຮົາໃຊ້ຊຸດ:
e^x = 1 + x + x^2/2! +x^3/3! +...
*/
ກໍານົດ e(x) {
ອັດຕະໂນມັດ a, d, e, f, i, m, v, z
/* ກວດສອບສັນຍາລັກ x. */
ຖ້າ (x<0) {
m=1
x = −x
}
/* ເງື່ອນໄຂ x. */
z = ຂະຫນາດ;
ຂະຫນາດ = 4 + z + .44*x;
ໃນຂະນະທີ່ (x > 1) {
f += 1;
x /= 2;
}
/* ເລີ່ມຕົ້ນຕົວແປ. */
v = 1+x
a = x
d = 1
ສໍາລັບ (i=2; 1; i++) {
e = (a *= x) / (d *= i)
ຖ້າ (e == 0) {
ຖ້າ (f>0) ໃນຂະນະທີ່ (f--) v = v*v;
scale = z
if (m) return (1/v);
ກັບຄືນ (v/1);
}
v += e
}
}
ຕໍ່ໄປນີ້ແມ່ນລະຫັດທີ່ໃຊ້ຄຸນສົມບັດຂະຫຍາຍຂອງ bc ເພື່ອປະຕິບັດໂຄງການງ່າຍດາຍ
ສໍາລັບການຄິດໄລ່ຍອດເງິນ checkbook. ໂຄງການນີ້ໄດ້ຖືກເກັບຮັກສາໄວ້ທີ່ດີທີ່ສຸດໃນໄຟລ໌ດັ່ງນັ້ນມັນສາມາດເປັນ
ໃຊ້ຫຼາຍຄັ້ງໂດຍບໍ່ຈໍາເປັນຕ້ອງພິມໃຫມ່ໃນທຸກໆການນໍາໃຊ້.
ຂະໜາດ=2
ພິມ "\nກວດເບິ່ງໂຄງການປື້ມ!"
ພິມ "ຈືຂໍ້ມູນການ, ເງິນຝາກເປັນທຸລະກໍາລົບ.\n"
ພິມ "ອອກໂດຍ 0 ທຸລະກຳ.\n\n"
ພິມ "ຍອດເງິນເບື້ອງຕົ້ນ?"; bal = ອ່ານ()
bal /= 1
ພິມ "\n"
ໃນຂະນະທີ່ (1) {
"ຍອດເງິນປະຈຸບັນ = "; ບານ
"ທຸລະກໍາ?"; trans = ອ່ານ()
ຖ້າ (trans == 0) ແຕກ;
bal -= trans
bal /= 1
}
ເຊົາ
ຕໍ່ໄປນີ້ແມ່ນຄໍານິຍາມຂອງຟັງຊັນ factorial recursive.
ກໍານົດ f (x) {
if (x <= 1) return (1);
ກັບຄືນ (f(x-1) * x);
}
READLINE ແລະ LIBEDIT OPTIONS
GNU bc ສາມາດຖືກລວບລວມ (ຜ່ານທາງເລືອກການຕັ້ງຄ່າ) ເພື່ອໃຊ້ GNU ເສັ້ນອ່ານ ບັນນາທິການປ້ອນຂໍ້ມູນ
ຫ້ອງສະຫມຸດຫຼື BSD libedit ຫ້ອງສະໝຸດ. ນີ້ອະນຸຍາດໃຫ້ຜູ້ໃຊ້ສາມາດແກ້ໄຂເສັ້ນກ່ອນ
ສົ່ງພວກເຂົາໄປ bc. ມັນຍັງອະນຸຍາດໃຫ້ມີປະຫວັດຂອງແຖວກ່ອນໜ້າທີ່ພິມ. ເມື່ອນີ້
ທາງເລືອກໄດ້ຖືກຄັດເລືອກ, bc ມີຕົວແປພິເສດອີກອັນໜຶ່ງ. ຕົວປ່ຽນແປງພິເສດນີ້, ປະຫວັດສາດ is
ຈໍານວນເສັ້ນປະຫວັດສາດທີ່ເກັບຮັກສາໄວ້. ສໍາລັບ ເສັ້ນອ່ານ, ຄ່າຂອງ -1 ຫມາຍຄວາມວ່າເປັນ
ຈໍານວນບໍ່ຈໍາກັດຂອງເສັ້ນປະຫວັດສາດແມ່ນເກັບຮັກສາໄວ້. ການຕັ້ງຄ່າຂອງ ປະຫວັດສາດ to a
ຕົວເລກບວກຈໍາກັດຈໍານວນເສັ້ນປະຫວັດສາດກັບຕົວເລກທີ່ໃຫ້. ຄ່າຂອງ 0
ປິດໃຊ້ງານຄຸນສົມບັດປະຫວັດສາດ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 100. ສໍາລັບຂໍ້ມູນເພີ່ມເຕີມ, ອ່ານທີ່
ຄູ່ມືຜູ້ໃຊ້ສໍາລັບ GNU ເສັ້ນອ່ານ, ປະຫວັດສາດ ແລະ BSD libedit ຫ້ອງສະໝຸດ. ຫນຶ່ງບໍ່ສາມາດເປີດໃຊ້ໄດ້
ທັງສອງ ເສັ້ນອ່ານ ແລະ libedit ໃນເວລາດຽວກັນ.
ຄວາມແຕກຕ່າງ
ສະບັບພາສາຂອງໂຄງການນີ້ bc ໄດ້ຖືກຈັດຕັ້ງປະຕິບັດຈາກຮ່າງ POSIX P1003.2/D11 ແລະປະກອບດ້ວຍຫຼາຍອັນ
ຄວາມແຕກຕ່າງແລະການຂະຫຍາຍທີ່ກ່ຽວຂ້ອງກັບຮ່າງແລະການຈັດຕັ້ງປະຕິບັດແບບດັ້ງເດີມ. ມັນແມ່ນ
ບໍ່ໄດ້ປະຕິບັດໃນວິທີການພື້ນເມືອງໂດຍການນໍາໃຊ້ dc(1). ສະບັບນີ້ແມ່ນຂະບວນການດຽວ
ເຊິ່ງ parses ແລະແລ່ນການແປພາສາລະຫັດ byte ຂອງໂຄງການ. ມີ "ບໍ່ມີເອກະສານ"
ທາງເລືອກ (-c) ທີ່ເຮັດໃຫ້ໂຄງການສົ່ງອອກລະຫັດ byte ກັບຜົນຜະລິດມາດຕະຖານແທນ
ແລ່ນມັນ. ມັນຖືກນໍາໃຊ້ຕົ້ນຕໍສໍາລັບການ debugging parser ແລະການກະກຽມຄະນິດສາດ
ຫ້ອງສະຫມຸດ.
ແຫຼ່ງຄວາມແຕກຕ່າງທີ່ສໍາຄັນແມ່ນສ່ວນຂະຫຍາຍ, ບ່ອນທີ່ຄຸນສົມບັດຖືກຂະຫຍາຍເພື່ອເພີ່ມເພີ່ມເຕີມ
ການທໍາງານແລະການເພີ່ມເຕີມ, ບ່ອນທີ່ຄຸນນະສົມບັດໃຫມ່ໄດ້ຖືກເພີ່ມ. ຕໍ່ໄປນີ້ແມ່ນບັນຊີລາຍຊື່ຂອງ
ຄວາມແຕກຕ່າງແລະການຂະຫຍາຍ.
ສະພາບແວດລ້ອມ LANG
ສະບັບນີ້ບໍ່ສອດຄ່ອງກັບມາດຕະຖານ POSIX ໃນການປຸງແຕ່ງ LANG
ຕົວແປສະພາບແວດລ້ອມ ແລະຕົວແປສະພາບແວດລ້ອມທັງໝົດເລີ່ມຕົ້ນດ້ວຍ LC_.
ຊື່ແບບດັ້ງເດີມ ແລະ POSIX bc ມີຊື່ຕົວອັກສອນດຽວສໍາລັບຫນ້າທີ່, ຕົວແປແລະ
arrays. ພວກເຂົາເຈົ້າໄດ້ຖືກຂະຫຍາຍອອກເປັນຊື່ຫຼາຍຕົວອັກສອນທີ່ເລີ່ມຕົ້ນດ້ວຍ a
ຕົວອັກສອນ ແລະອາດມີຕົວອັກສອນ, ຕົວເລກ ແລະຕົວອັກສອນຂີດກ້ອງ.
Strings
Strings ບໍ່ໄດ້ຖືກອະນຸຍາດໃຫ້ມີຕົວອັກສອນ NUL. POSIX ເວົ້າວ່າທຸກຕົວອັກສອນຕ້ອງ
ຈະຖືກລວມເຂົ້າໃນສະຕຣິງ.
POSIX ສຸດທ້າຍ bc ບໍ່ມີ ສຸດທ້າຍ ຕົວແປ. ການປະຕິບັດບາງຢ່າງຂອງ bc ໃຊ້ໄລຍະເວລາ
(.) ໃນລັກສະນະທີ່ຄ້າຍຄືກັນ.
ການປຽບທຽບ
POSIX bc ອະນຸຍາດໃຫ້ມີການປຽບທຽບພຽງແຕ່ໃນ if ຄໍາຖະແຫຼງການ, the while , ແລະ
ການສະແດງອອກທີສອງຂອງຄໍາຖະແຫຼງການ. ນອກຈາກນີ້, ມີພຽງແຕ່ຫນຶ່ງການດໍາເນີນງານທີ່ກ່ຽວຂ້ອງ
ອະນຸຍາດໃນແຕ່ລະຖະແຫຼງການເຫຼົ່ານັ້ນ.
if statement, else clause
POSIX bc ບໍ່ມີຂໍ້ອື່ນ.
ສໍາລັບການຖະແຫຼງການ
POSIX bc ຮຽກຮ້ອງໃຫ້ມີການສະແດງອອກທັງຫມົດຢູ່ໃນຄໍາຖະແຫຼງການ.
&&, ||, !
POSIX bc ບໍ່ມີຕົວປະຕິບັດການຢ່າງມີເຫດຜົນ.
ອ່ານຟັງຊັນ
POSIX bc ບໍ່ມີຟັງຊັນອ່ານ.
ພິມຖະແຫຼງການ
POSIX bc ບໍ່ມີໃບລາຍງານການພິມ.
ສືບຕໍ່ຖະແຫຼງການ
POSIX bc ບໍ່ມີຄໍາຖະແຫຼງການສືບຕໍ່.
ໃບລາຍງານຜົນຕອບແທນ
POSIX bc ຕ້ອງການວົງເລັບຮອບຕົວສະແດງຜົນຕອບແທນ.
ຕົວກໍານົດການ array
POSIX bc ບໍ່ (ປະຈຸບັນ) ສະຫນັບສະຫນູນພາລາມິເຕີ array ຢ່າງເຕັມທີ່. ໄວຍາກອນ POSIX
ອະນຸຍາດໃຫ້ສໍາລັບ arrays ໃນຄໍານິຍາມຫນ້າທີ່, ແຕ່ບໍ່ໄດ້ສະຫນອງວິທີການເພື່ອລະບຸ
array ເປັນພາລາມິເຕີຕົວຈິງ. (ນີ້ແມ່ນຫຼາຍທີ່ສຸດອາດຈະເປັນການຄວບຄຸມໃນ
grammar.) ການປະຕິບັດແບບດັ້ງເດີມຂອງ bc ມີພຽງແຕ່ໂທຫາໂດຍ array ມູນຄ່າ
ຕົວກໍານົດການ.
ຮູບແບບການທໍາງານ
POSIX bc ຮຽກຮ້ອງໃຫ້ມີວົງເລັບເປີດຢູ່ໃນເສັ້ນດຽວກັນກັບ ກໍານົດ ຄໍາສໍາຄັນແລະ
ອັດຕະໂນມັດ ຖະແຫຼງການໃນແຖວຕໍ່ໄປ.
=+, =-, =*, =/, =%, =^
POSIX bc ບໍ່ຈໍາເປັນຕ້ອງກໍານົດຕົວປະຕິບັດການ "ແບບເກົ່າ" ເຫຼົ່ານີ້.
ສະບັບນີ້ອາດຈະອະນຸຍາດໃຫ້ມອບຫມາຍ "ແບບເກົ່າ" ເຫຼົ່ານີ້. ໃຊ້ຄໍາຖະແຫຼງການຈໍາກັດເພື່ອ
ເບິ່ງວ່າສະບັບຕິດຕັ້ງສະຫນັບສະຫນູນພວກເຂົາ. ຖ້າມັນສະຫນັບສະຫນູນ "ແບບເກົ່າ"
ຜູ້ປະຕິບັດການມອບຫມາຍ, ຄໍາສັ່ງ "a =-1" ຈະຫຼຸດລົງ a ໂດຍ 1 ແທນ
ຕັ້ງ a ກັບຄ່າ -1.
ຍະຫວ່າງໃນຕົວເລກ
ການປະຕິບັດອື່ນໆຂອງ bc ອະນຸຍາດໃຫ້ມີຊ່ອງຫວ່າງໃນຕົວເລກ. ຕົວຢ່າງ, "x=1 3" ຈະ
ກຳນົດຄ່າ 13 ໃຫ້ກັບຕົວແປ x. ຄໍາຖະແຫຼງດຽວກັນຈະເຮັດໃຫ້ເກີດ syntax
ຄວາມຜິດພາດໃນສະບັບນີ້ຂອງ bc.
ຄວາມຜິດພາດແລະການປະຕິບັດ
ການປະຕິບັດນີ້ແຕກຕ່າງຈາກການປະຕິບັດອື່ນໆໃນຂໍ້ກໍານົດຂອງລະຫັດໃດ
ປະຕິບັດໃນເວລາທີ່ syntax ແລະຄວາມຜິດພາດອື່ນໆຖືກພົບເຫັນຢູ່ໃນໂຄງການ. ຖ້າ syntax ຜິດພາດ
ພົບເຫັນຢູ່ໃນຄໍານິຍາມຫນ້າທີ່, ການຟື້ນຟູຄວາມຜິດພາດພະຍາຍາມຊອກຫາຈຸດເລີ່ມຕົ້ນຂອງ a
ຖະແຫຼງການແລະສືບຕໍ່ການແຍກຟັງຊັນ. ເມື່ອພົບຂໍ້ຜິດພາດຂອງ syntax ໃນ
ຟັງຊັນ, ຟັງຊັນຈະບໍ່ສາມາດເອີ້ນໄດ້ແລະກາຍເປັນບໍ່ໄດ້ກໍານົດ. syntax ຜິດພາດ
ໃນລະຫັດການປະຕິບັດແບບໂຕ້ຕອບຈະເຮັດໃຫ້ບລັອກການປະຕິບັດໃນປະຈຸບັນບໍ່ຖືກຕ້ອງ. ໄດ້
ຕັນການປະຕິບັດແມ່ນສິ້ນສຸດລົງໂດຍຈຸດສິ້ນສຸດຂອງເສັ້ນທີ່ປາກົດຫຼັງຈາກສໍາເລັດ
ລໍາດັບຂອງຄໍາຖະແຫຼງການ. ຍົກຕົວຢ່າງ,
ເຖິງ = 1
b=2
ມີສອງຕັນປະຕິບັດແລະ
{ a = 1
b = 2 }
ມີຫນຶ່ງຕັນປະຕິບັດ. ຄວາມຜິດພາດ runtime ໃດຈະສິ້ນສຸດການປະຕິບັດຂອງປະຈຸບັນ
ຕັນປະຕິບັດ. ການເຕືອນເວລາແລ່ນຈະບໍ່ຢຸດການປິດການດໍາເນີນການປະຈຸບັນ.
ການຂັດຂວາງ
ໃນລະຫວ່າງການປະຊຸມແບບໂຕ້ຕອບ, ສັນຍານ SIGINT (ປົກກະຕິແລ້ວແມ່ນສ້າງຂຶ້ນໂດຍການຄວບຄຸມ
C ຕົວອັກສອນຈາກ terminal) ຈະເຮັດໃຫ້ເກີດການປະຕິບັດຕັນການປະຕິບັດໃນປະຈຸບັນ
ຈະຖືກຂັດຂວາງ. ມັນຈະສະແດງຂໍ້ຜິດພາດ "runtime" ທີ່ຊີ້ບອກວ່າຟັງຊັນໃດ
ຂັດຂວາງ. ຫຼັງຈາກໂຄງສ້າງ runtime ທັງຫມົດໄດ້ຖືກອະນາໄມຂຶ້ນ, ຂໍ້ຄວາມຈະເປັນ
ພິມເພື່ອແຈ້ງໃຫ້ຜູ້ໃຊ້ຮູ້ວ່າ bc ແມ່ນກຽມພ້ອມສໍາລັບການປ້ອນຂໍ້ມູນເພີ່ມເຕີມ. ທັງໝົດທີ່ກຳນົດໄວ້ກ່ອນໜ້ານີ້
ຟັງຊັນຍັງຄົງຖືກກໍານົດແລະຄ່າຂອງຕົວແປທີ່ບໍ່ແມ່ນອັດຕະໂນມັດທັງຫມົດແມ່ນຄ່າຢູ່ທີ່
ຈຸດຂອງການຂັດຂວາງ. ຕົວແປອັດຕະໂນມັດ ແລະຕົວກໍານົດການທໍາງານທັງໝົດຖືກລຶບອອກ
ໃນລະຫວ່າງຂະບວນການທໍາຄວາມສະອາດ. ໃນລະຫວ່າງກອງປະຊຸມທີ່ບໍ່ມີການໂຕ້ຕອບ, ສັນຍານ SIGINT
ຈະສິ້ນສຸດໄລຍະທັງຫມົດຂອງ bc.
ຈຳ ກັດ
ຕໍ່ໄປນີ້ແມ່ນຂອບເຂດຈໍາກັດໃນປະຈຸບັນສໍາລັບການນີ້ bc ໂຮງງານຜະລິດ. ບາງຄົນຂອງພວກເຂົາອາດຈະ
ໄດ້ຖືກປ່ຽນໂດຍການຕິດຕັ້ງ. ໃຊ້ຄຳຖະແຫຼງການຈຳກັດເພື່ອເບິ່ງຄ່າຕົວຈິງ.
BC_BASE_MAX
ພື້ນຖານຜົນຜະລິດສູງສຸດໃນປັດຈຸບັນແມ່ນກໍານົດຢູ່ທີ່ 999. ພື້ນຖານການປ້ອນຂໍ້ມູນສູງສຸດແມ່ນ 16.
BC_DIM_MAX
ປະຈຸບັນນີ້ແມ່ນຂອບເຂດຈໍາກັດຂອງ 65535 ຕາມການແຈກຢາຍ. ການຕິດຕັ້ງຂອງເຈົ້າ
ອາດຈະແຕກຕ່າງກັນ.
BC_SCALE_MAX
ຈໍານວນຕົວເລກຫຼັງຈາກຈຸດທົດສະນິຍົມແມ່ນຈໍາກັດ INT_MAX ຕົວເລກ. ນອກຈາກນີ້,
ຈຳນວນຕົວເລກກ່ອນຈຸດທົດສະນິຍົມແມ່ນຈຳກັດໃຫ້ INT_MAX ຕົວເລກ.
BC_STRING_MAX
ຂີດຈຳກັດຈຳນວນຕົວອັກສອນໃນສະຕຣິງແມ່ນ INT_MAX ຕົວອັກສອນ.
ເລກ ກຳ ລັງ
ຄ່າຂອງເລກກຳລັງໃນການດຳເນີນການເພີ່ມ (^) ແມ່ນຈຳກັດໄວ້ທີ່ LONG_MAX.
ຊື່ຕົວແປ
ຂໍ້ຈໍາກັດໃນປະຈຸບັນກ່ຽວກັບຈໍານວນຊື່ທີ່ເປັນເອກະລັກແມ່ນ 32767 ສໍາລັບແຕ່ລະແບບງ່າຍດາຍ
ຕົວແປ, array ແລະຫນ້າທີ່.
ENVIRONMENT ຄວາມຮັບຜິດຊອບ
ຕົວແປສະພາບແວດລ້ອມຕໍ່ໄປນີ້ຖືກປະມວນຜົນໂດຍ bc:
POSIXLY_CORRECT
ນີ້ແມ່ນຄືກັນກັບ -s ທາງເລືອກ.
BC_ENV_ARGS
ນີ້ແມ່ນກົນໄກການໂຕ້ຖຽງອື່ນ bc. ຮູບແບບແມ່ນຄືກັນກັບ
ການໂຕ້ຖຽງແຖວຄໍາສັ່ງ. ການໂຕ້ແຍ້ງເຫຼົ່ານີ້ຖືກປະມວນຜົນກ່ອນ, ດັ່ງນັ້ນໄຟລ໌ໃດກໍໄດ້ລະບຸໄວ້
ໃນການໂຕ້ຖຽງຂອງສະພາບແວດລ້ອມແມ່ນໄດ້ຮັບການປະຕິບັດກ່ອນທີ່ຈະໄຟລ໌ argument ເສັ້ນຄໍາສັ່ງໃດຫນຶ່ງ.
ນີ້ອະນຸຍາດໃຫ້ຜູ້ໃຊ້ເພື່ອຕັ້ງຄ່າ "ມາດຕະຖານ" ທາງເລືອກແລະໄຟລ໌ທີ່ຈະໄດ້ຮັບການປຸງແຕ່ງຢູ່ທີ່
ທຸກໆການຮຽກຮ້ອງຂອງ bc. ໄຟລ໌ໃນຕົວແປສະພາບແວດລ້ອມຈະປົກກະຕິ
ມີຄໍານິຍາມຟັງຊັນສໍາລັບຫນ້າທີ່ຜູ້ໃຊ້ຕ້ອງການກໍານົດທຸກໆຄັ້ງ bc is
ດໍາເນີນການ.
BC_LINE_LENGTH
ອັນນີ້ຄວນຈະເປັນຈຳນວນເຕັມທີ່ລະບຸຈຳນວນຕົວອັກສອນໃນແຖວຜົນຜະລິດ
ຕົວເລກ. ນີ້ປະກອບມີ backslash ແລະຕົວອັກສອນແຖວໃຫມ່ສໍາລັບຕົວເລກຍາວ. ເປັນ
ສ່ວນຂະຫຍາຍ, ຄ່າຂອງສູນປິດຄຸນສົມບັດຫຼາຍແຖວ. ມູນຄ່າອື່ນໆ
ຂອງຕົວແປນີ້ໜ້ອຍກວ່າ 3 ກຳນົດຄວາມຍາວເສັ້ນເປັນ 70.
ທິດສະດີວິທະຍາ
ຖ້າໄຟລ໌ໃດໆຢູ່ໃນເສັ້ນຄໍາສັ່ງບໍ່ສາມາດເປີດໄດ້, bc ຈະລາຍງານວ່າໄຟລ໌ແມ່ນ
ບໍ່ສາມາດໃຊ້ໄດ້ ແລະຢຸດເຊົາ. ນອກຈາກນີ້, ມີການລວບລວມແລະດໍາເນີນການວິນິດໄສທີ່ໃຊ້ເວລາທີ່ຄວນ
ຈະອະທິບາຍຕົນເອງ.
ໃຊ້ bc ອອນໄລນ໌ໂດຍໃຊ້ບໍລິການ onworks.net