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


4
Pragma ในกำหนดมาโคร
มีวิธีบางอย่างในการฝังคำสั่ง pragma ในมาโครด้วยคำสั่งอื่น ๆ หรือไม่? ฉันพยายามที่จะบรรลุสิ่งที่ต้องการ: #define DEFINE_DELETE_OBJECT(type) \ void delete_ ## type_(int handle); \ void delete_ ## type(int handle); \ #pragma weak delete_ ## type_ = delete_ ## type ฉันโอเคกับโซลูชันการเพิ่มประสิทธิภาพ (บันทึกสำหรับคลื่น) ถ้ามีอยู่

3
เชื่อมต่อ int กับสตริงโดยใช้ C Preprocessor
ฉันกำลังพยายามหาวิธีเชื่อมสตริง#define'd int กับ a #define' d โดยใช้C Preprocessor คอมไพเลอร์ของฉันคือ GCC 4.1 บน CentOS 5 โซลูชันนี้ควรใช้ได้กับ MinGW ด้วย ฉันต้องการต่อท้ายหมายเลขเวอร์ชันลงในสตริง แต่วิธีเดียวที่ฉันจะทำให้มันใช้งานได้คือการทำสำเนาหมายเลขเวอร์ชันที่กำหนดเป็นสตริง สิ่งที่ใกล้เคียงที่สุดที่ฉันสามารถหาได้คือวิธีการอ้างอาร์กิวเมนต์มาโคร แต่ใช้ไม่ได้กับ#defines สิ่งนี้ไม่ได้ผล #define MAJOR_VER 2 #define MINOR_VER 6 #define MY_FILE "/home/user/.myapp" #MAJOR_VER #MINOR_VER มันไม่ทำงานโดยไม่ต้อง#s ทั้งเพราะค่าจะเป็นตัวเลขและมันจะขยายตัวออกไป"/home/user/.myapp" 2 6ซึ่งไม่ถูกต้องC วิธีนี้ใช้งานได้ แต่ฉันไม่ชอบให้สำเนาของเวอร์ชันกำหนดเพราะฉันต้องการให้เป็นตัวเลขเช่นกัน #define MAJOR_VER 2 #define MINOR_VER 6 #define MAJOR_VER_STR "2" #define MINOR_VER_STR …

13
แอปพลิเคชันของตัวดำเนินการประมวลผล ## preprocessor และ gotchas ที่ต้องพิจารณามีอะไรบ้าง?
ดังที่ได้กล่าวไว้ในคำถามก่อนหน้านี้หลายข้อฉันกำลังทำงานผ่าน K&R และกำลังอยู่ในพรีโปรเซสเซอร์ สิ่งที่น่าสนใจอีกอย่างหนึ่ง - สิ่งที่ฉันไม่เคยรู้มาก่อนจากการพยายามเรียนรู้ C - ก่อนหน้านี้คือ##ตัวดำเนินการก่อนโปรเซสเซอร์ ตาม K&R: ตัวดำเนินการตัวประมวลผลก่อน## จัดเตรียมวิธีการต่ออาร์กิวเมนต์ที่แท้จริงระหว่างการขยายมาโคร หากพารามิเตอร์ในข้อความแทนที่อยู่ติดกับ a ##พารามิเตอร์จะถูกแทนที่ด้วยอาร์กิวเมนต์จริง ##และช่องว่างรอบ ๆ จะถูกลบออกและผลลัพธ์จะถูกสแกนใหม่ ตัวอย่างเช่นแมโครpaste เชื่อมสองอาร์กิวเมนต์: #define paste(front, back) front ## back เพื่อสร้างโทเค็นpaste(name, 1) name1 ทำไมคนถึงใช้สิ่งนี้ในโลกแห่งความเป็นจริง ตัวอย่างการใช้งานจริงมีอะไรบ้างและมีข้อควรพิจารณาหรือไม่?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.