คำถามติดแท็ก macros

*** ห้ามใช้ภาษา VBA / MS-Office ใช้ [vba] แทน *** มาโครคือกฎหรือรูปแบบที่ระบุว่าควรแมปลำดับอินพุตที่แน่นอน (มักจะเป็นลำดับของอักขระ) กับลำดับเอาต์พุต (หรือมักเป็นลำดับของอักขระ) ตามขั้นตอนที่กำหนด .

5
คืออะไร ":-!!" ในรหัส C?
ฉันชนรหัสมาโครแปลก ๆ นี้ใน/usr/include/linux/kernel.h : /* Force a compilation error if condition is true, but also produce a result (of value 0 and type size_t), so the expression can be used e.g. in a structure initializer (or where-ever else comma expressions aren't permitted). */ #define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); })) #define …
1665 c  linux  macros  linux-kernel 

6
นิยามแปลก ๆ ของมาโคร TRUE และ FALSE
ฉันได้เห็นคำจำกัดความของแมโครดังต่อไปนี้ในหนังสือการเข้ารหัส #define TRUE '/'/'/' #define FALSE '-'-'-' ไม่มีคำอธิบายที่นั่น กรุณาอธิบายให้ฉันวิธีการเหล่านี้จะทำงานเป็นและTRUEFALSE
300 c++  c  macros  boolean  obfuscation 

14
อะไรทำให้มาโคร Lisp มีความพิเศษ?
การอ่านบทความของ Paul Graham เกี่ยวกับภาษาการเขียนโปรแกรมเราคิดว่ามาโคร Lispเป็นวิธีเดียวที่จะไป ในฐานะนักพัฒนาที่ยุ่งทำงานกับแพลตฟอร์มอื่นฉันไม่มีสิทธิ์ใช้งาน Lisp macros ในฐานะคนที่ต้องการเข้าใจเรื่องปากต่อปากโปรดอธิบายว่าอะไรทำให้คุณสมบัตินี้มีประสิทธิภาพมาก โปรดเชื่อมโยงสิ่งนี้กับสิ่งที่ฉันจะเข้าใจจากโลกของการพัฒนา Python, Java, C # หรือ C

2
วิธีใช้ #ifdef พร้อมเงื่อนไข OR
ขออภัยที่ถามคำถามพื้นฐานมาก ฉันต้องการตั้งค่าหรือเงื่อนไขใน #ifdef directive ทำอย่างไร ฉันเหนื่อย #ifdef LINUX | ANDROID ... .. #endif มันไม่ได้ผล? วิธีที่เหมาะสมคืออะไร?
244 c  macros 

10
ฉันสามารถบันทึก / เล่นมาโครใน Visual Studio 2012/2013/2015/2017/2019 ได้หรือไม่
เห็นได้ชัดว่ามาโครถูกดร็อปจาก Visual Studio 2012 มีปลั๊กอิน / ส่วนขยาย / เครื่องมือที่จะให้ฉันบันทึก & เล่นแป้นพิมพ์มาโคร (เหมือนแมโครบันทึก / เล่นชั่วคราวใน Visual Studio 2010) หรือไม่ ตัวอย่างเช่นฉันมักจะใช้แมโครเมื่อแปลงรหัสจากภาษาหนึ่งเป็นอีกภาษาหนึ่งหรือเพื่อสร้างคุณสมบัติอย่างรวดเร็วจากรายการข้อความเป็นต้น

8
การใช้มาโครมากเกินไปในจำนวนอาร์กิวเมนต์
ฉันมีมาโครสองตัวFOO2และFOO3: #define FOO2(x,y) ... #define FOO3(x,y,z) ... ฉันต้องการกำหนดแมโครใหม่FOOดังนี้: #define FOO(x,y) FOO2(x,y) #define FOO(x,y,z) FOO3(x,y,z) แต่วิธีนี้ใช้ไม่ได้เนื่องจากมาโครไม่ทำงานเกินจำนวนอาร์กิวเมนต์ หากไม่มีการแก้ไขFOO2และFOO3มีวิธีกำหนดแมโครFOO(ใช้__VA_ARGS__หรือไม่เช่นนั้น) เพื่อให้ได้ผลการเยี่ยงเดียวFOO(x,y)กับFOO2และFOO(x,y,z)เพื่อFOO3?
183 c  macros  c-preprocessor 

1
รับประเภทโครงสร้างด้วยวิธีการเรียนที่ไม่ระบุชื่อจากแมโคร
สมมติว่าเราต้องการเขียนแมโครที่กำหนดคลาสนิรนามด้วยสมาชิกประเภทหรือวิธีการแล้วสร้างอินสแตนซ์ของคลาสนั้นที่พิมพ์แบบคงที่เป็นชนิดโครงสร้างกับวิธีการเหล่านั้นเป็นต้นซึ่งเป็นไปได้กับระบบมาโครใน 2.10 0 และส่วนสมาชิกประเภทนั้นง่ายมาก: object MacroExample extends ReflectionUtils { import scala.language.experimental.macros import scala.reflect.macros.Context def foo(name: String): Any = macro foo_impl def foo_impl(c: Context)(name: c.Expr[String]) = { import c.universe._ val Literal(Constant(lit: String)) = name.tree val anon = newTypeName(c.fresh) c.Expr(Block( ClassDef( Modifiers(Flag.FINAL), anon, Nil, Template( Nil, emptyValDef, List( constructor(c.universe), TypeDef(Modifiers(), newTypeName(lit), Nil, …

30
มาโครในโลกแห่งความจริงที่เลวร้ายที่สุดที่คุณเคยเจอเจอเคยทำมาก่อนคืออะไร?
ล็อคแล้ว คำถามและคำตอบนี้ถูกล็อคเนื่องจากคำถามอยู่นอกหัวข้อ แต่มีความสำคัญทางประวัติศาสตร์ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ มาโครในโลกแห่งความเป็นจริงที่เลวร้ายที่สุด คือการละเมิดที่คุณเคยเจอมาก่อน (โปรดอย่าตอบคำถาม IOCCC * haha ​​*) โปรดเพิ่มตัวอย่างสั้น ๆ หรือเรื่องราวถ้ามันสนุกจริงๆ เป้าหมายคือการสอนอะไรบางอย่างแทนที่จะบอกผู้คนเสมอว่า "ไม่เคยใช้มาโคร" ps: ฉันเคยใช้มาโครมาก่อน ... แต่โดยปกติฉันจะกำจัดมันในที่สุดเมื่อฉันมีวิธีแก้ปัญหา "ของจริง" (แม้ว่าวิธีการแก้ปัญหาจริงจะถูกแทรกเข้าไป โบนัส:ยกตัวอย่างว่าแมโครนั้นดีกว่าโซลูชันที่ไม่ใช่มาโครจริงๆ คำถามที่เกี่ยวข้อง: มาโคร C ++ จะมีประโยชน์เมื่อใด
176 c++  c  macros  preprocessor 



24
แมโคร __FILE__ แสดงเส้นทางแบบเต็ม
แมโครมาตรฐานที่กำหนดไว้ล่วงหน้าที่__FILE__มีอยู่ใน C แสดงพา ธ เต็มไปยังไฟล์ มีวิธีใดที่จะทำให้เส้นทางสั้นลงหรือไม่ ฉันหมายถึงแทนที่จะ /full/path/to/file.c ฉันเห็น to/file.c หรือ file.c
164 c  file  macros  path 

2
#pragma เป็นส่วนหนึ่งของมาตรฐาน C ++ 11 หรือไม่
ตามเนื้อผ้าวิธีมาตรฐานและแบบพกพาเพื่อหลีกเลี่ยงการรวมส่วนหัวหลายรายการใน C ++ คือ / คือการใช้#ifndef - #define - #endifชุดรูปแบบคำสั่ง pre-compiler หรือที่เรียกว่าชุดรูปแบบมหภาคการ์ด (ดูตัวอย่างรหัสด้านล่าง) #ifndef MY_HEADER_HPP #define MY_HEADER_HPP ... #endif ในการใช้งานมากที่สุด / คอมไพเลอร์ (ดูภาพด้านล่าง) แต่มีอีกทางเลือก "สง่างาม" #pragma onceที่ทำหน้าที่วัตถุประสงค์เช่นเดียวกับโครงการแมโครยามที่เรียกว่า #pragma onceมีข้อดีหลายประการเมื่อเทียบกับชุดรูปแบบการป้องกันมาโครซึ่งรวมถึงรหัสน้อยกว่าการหลีกเลี่ยงการปะทะกันของชื่อและบางครั้งการปรับปรุงความเร็วในการคอมไพล์ ฉันทำการวิจัยบางอย่างฉันรู้ว่าถึงแม้#pragma onceคำสั่งจะได้รับการสนับสนุนจากคอมไพเลอร์ที่รู้จักกันเกือบทั้งหมด แต่ก็มีความขุ่นเคืองว่า#pragma onceคำสั่งนั้นเป็นส่วนหนึ่งของมาตรฐาน C ++ 11 หรือไม่ คำถาม: บางคนสามารถอธิบายได้ว่า#pragma onceคำสั่งนั้นเป็นส่วนหนึ่งของมาตรฐาน C ++ 11 หรือไม่? หากไม่ได้เป็นส่วนหนึ่งของมาตรฐาน C ++ 11 มีแผนใดบ้างในการรวมไว้ในรุ่นที่ใหม่กว่า (เช่น …

6
มาโคร Q_OBJECT ทำอะไร เหตุใดออบเจ็กต์ Qt ทั้งหมดจึงต้องการมาโครนี้
ฉันเพิ่งเริ่มใช้ Qt และสังเกตเห็นว่านิยามคลาสตัวอย่างทั้งหมดมีมาโครQ_OBJECTเป็นบรรทัดแรก จุดประสงค์ของมาโครตัวประมวลผลล่วงหน้านี้คืออะไร?
132 c++  qt  macros 

14
ฉันจะแสดงค่าของ #define ในเวลาคอมไพล์ได้อย่างไร
ฉันกำลังพยายามหาว่า Boost เวอร์ชันใดที่คิดว่าใช้อยู่ ฉันต้องการทำสิ่งนี้: #error BOOST_VERSION แต่พรีโปรเซสเซอร์ไม่ขยาย BOOST_VERSION ฉันรู้ว่าฉันสามารถพิมพ์ออกมาได้ในเวลาทำงานจากโปรแกรมและฉันรู้ว่าฉันสามารถดูผลลัพธ์ของตัวประมวลผลล่วงหน้าเพื่อค้นหาคำตอบได้ ฉันรู้สึกว่ามีวิธีดำเนินการนี้ในระหว่างการรวบรวมอาจเป็นประโยชน์


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.