นี่คือคำสั่ง shtool-scpp ที่สามารถเรียกใช้ในผู้ให้บริการโฮสติ้งฟรีของ OnWorks โดยใช้หนึ่งในเวิร์กสเตชันออนไลน์ฟรีของเรา เช่น Ubuntu Online, Fedora Online, โปรแกรมจำลองออนไลน์ของ Windows หรือโปรแกรมจำลองออนไลน์ของ MAC OS
โครงการ:
ชื่อ
shtool-scpp - ไฟล์ซอร์ส GNU shtool C ตัวประมวลผลล่วงหน้า
เรื่องย่อ
สตูล สพป [-v|--รายละเอียด] [-p|--อนุรักษ์] [-f|--กรอง กรอง] [-o|--เอาท์พุท ออฟไทล์]
[-t|--แม่แบบ ไฟล์] [-M|--เครื่องหมาย เครื่องหมาย] [-D|--กำหนด ชื่อ] [-C|--ระดับ CNAME] ไฟล์ [ไฟล์
... ]
DESCRIPTION
คำสั่งนี้เป็นตัวประมวลผลล่วงหน้าไฟล์ต้นฉบับ ANSI C เพิ่มเติมสำหรับการแชร์ ซีพี(1) รหัส
เซ็กเมนต์ ตัวแปรภายใน และฟังก์ชันภายใน ความตั้งใจนี้มาจาก
การเขียนไลบรารีใน ANSI C ไฟล์ส่วนหัวภายในที่ใช้ร่วมกันโดยทั่วไปมักใช้สำหรับ
การแบ่งปันข้อมูลระหว่างไฟล์ต้นทางของไลบรารี
การดำเนินการคือการแยกวิเคราะห์โครงสร้างพิเศษใน ไฟล์s สร้างบางสิ่งจากสิ่งเหล่านี้
สร้างและใส่ไว้ที่ตำแหน่ง เครื่องหมาย in ไฟล์ โดยเขียนผลลัพธ์ไปที่ ออฟไทล์.
นอกจากนี้ ไฟล์ไม่เคยสัมผัสหรือดัดแปลง แทนที่โครงสร้างจะถูกลบออก
ภายหลังโดย ซีพี(1) ขั้นตอนของกระบวนการสร้าง ข้อกำหนดเบื้องต้นเพียงอย่างเดียวคือทุก ไฟล์
มี ``"#include ""ออฟไทล์"""'' ที่ด้านบน.
คำสั่งนี้มีคุณลักษณะดังต่อไปนี้: อันดับแรก หลีกเลี่ยงมลพิษเนมสเปซและ
ลดความพยายามในการสร้างต้นแบบสำหรับสัญลักษณ์ภายในโดยการจดจำฟังก์ชันและตัวแปร
ซึ่งถูกกำหนดด้วยตัวระบุคลาสการจัดเก็บ ``CNAME''. ตัวอย่างเช่น if CNAME is
``ฝึกงาน'' ฟังก์ชัน ``" ฝึกงานเป็นโมฆะ *foobar (int quux)"'' ในหนึ่งใน ไฟล์s คือ
แปลเป็นทั้ง ``"#define foobar __foobar"'' และ ``"extern void *foobar(int
quux);"'' ใน ออฟไทล์. นอกจากนี้ทั่วโลก ``"#define" CNAME "/**/"'' ถูกสร้างขึ้นใน .ด้วย
ออฟไทล์ เพื่อให้คอมไพเลอร์ละเว้นตัวระบุคลาสหน่วยเก็บข้อมูลเพิ่มเติมนี้อย่างเงียบๆ
ประการที่สอง ไฟล์ต้นฉบับของไลบรารีมักต้องการแชร์ "typedef", "#define" เป็นต้น มากกว่า
ขอบเขตไฟล์ต้นทาง เพื่อให้บรรลุสิ่งนี้สามารถวางสิ่งนี้ด้วยตนเองลงใน
ไฟล์ หรือใช้คุณสมบัติที่สองของ สพป: รหัสทั้งหมดใน ไฟล์ห่อหุ้มด้วย ``"#if "ชื่อ
... "#endif"'' ถูกคัดลอกไปยัง .โดยอัตโนมัติ ออฟไทล์. นอกจากนี้ทั่วโลก ``"#define" ชื่อ
0'' ยังถูกสร้างขึ้นใน ออฟไทล์ เพื่อให้คอมไพเลอร์ข้ามส่วนนี้ไปอย่างเงียบๆ (เพราะเป็น
พบแล้วในส่วนหัว)
OPTIONS
มีตัวเลือกบรรทัดคำสั่งต่อไปนี้
-v, --รายละเอียด
แสดงข้อมูลการประมวลผลบางส่วน
-p, --อนุรักษ์
ผลไม้กวน ออฟไทล์ ไม่ขึ้นกับบรรทัด ``#line'' ที่สร้างขึ้น สิ่งนี้มีประโยชน์สำหรับ
Makefiles ถ้าเนื้อหาที่แท้จริงของ ออฟไทล์ จะไม่เปลี่ยน มีแต่เบอร์ไลน์ ค่าเริ่มต้นคือ
เพื่อเขียนทับ
-f, --กรอง กรอง
ใช้การประมวลผลล่วงหน้าอย่างน้อยหนึ่งรายการ ความกระหายน้ำ(1) กรอง คำสั่ง (ปกติจะเป็นประเภท
``"s/.../.../"'') ให้กับไฟล์อินพุตแต่ละไฟล์ก่อนที่จะแยกวิเคราะห์อินพุต ตัวเลือกนี้สามารถ
เกิดขึ้นหลายครั้ง
-o, --เอาท์พุท ออฟไทล์
ชื่อไฟล์เอาต์พุต ค่าเริ่มต้นคือ "lib.h"
-t, --แม่แบบ ไฟล์
ชื่อไฟล์เทมเพลต ค่าเริ่มต้นคือ "lib.h.in"
-M, --เครื่องหมาย เครื่องหมาย
ทำเครื่องหมายเพื่อแทนที่ด้วยโครงสร้างที่สร้างขึ้น ค่าเริ่มต้นคือ "%%MARK%%"
-D, --กำหนด ชื่อ
ช่วยแก้ไขข้อบกพร่องฉันหน่อย. ค่าเริ่มต้นคือ "cpp"
-C, --ระดับ CNAME
ช่วยแก้ไขข้อบกพร่องฉันหน่อย. ค่าเริ่มต้นคือ "ฝึกงาน"
ตัวอย่าง
#เมคไฟล์
SRCS=foo_bar.c foo_quux.c
foo_p.h: foo_p.h.ใน
shtool scpp -o foo_p.h -t foo_p.h.in \
-M %%MARK%% -D cpp -C ฝึกงาน $(SRCS)
/* foo_p.h.in */
#ifndef FOO_P_H
#กำหนด FOO_P_H
%%เครื่องหมาย%%
#endif /* FOO_P_H */
/*foo_bar.c */
#รวม "foo_p.h"
#ถ้าcpp
#กำหนด OURS_INIT 4711
#เอนดิฟ
นักศึกษาฝึกงานของเรา;
คงที่ int myone = 0815;
แถบ int ฝึกงาน (เป็นโมฆะ)
{
ของเรา += myone;
}
/*foo_quux.c */
#รวม "foo_p.h"
int main(int argc, ถ่าน *argv[])
{
int ฉัน;
ของเรา = OURS_INIT
สำหรับ (i = 0; i < 10; i++) {
บาร์();
printf("ของเราตอนนี้ %d\n", ของเรา);
}
0 กลับ;
}
ประวัติ
การขอ GNU สตูล สพป คำสั่งเดิมเขียนโดย Ralf S. Engelschall
<[ป้องกันอีเมล]> ในปี 1999 สำหรับ GNU สตูล. มันได้รับแจ้งจากความต้องการที่จะมี
โรงงานแปรรูปใน GNU PTH โครงการ
ใช้ shtool-scpp ออนไลน์โดยใช้บริการ onworks.net