ฉันกำลังพยายามหาวิธีสร้างสตริงตัวแปรสำหรับคำสั่ง #include โดยใช้ GCC
แนวคิดก็คือสำหรับแต่ละโมดูลซอร์สที่ฉันเขียน ฉันต้องการรวมเป็นส่วนหัว ซึ่งเป็นซอร์ส C ที่สร้างขึ้นแบบไดนามิก ซึ่งถูกสร้างขึ้นก่อนหน้านี้ในกระบวนการสร้าง
การสร้างไฟล์นี้ไม่ใช่ปัญหา รวมไปถึงที่น่าเสียดายก็คือ
สิ่งที่ฉันมีจนถึงตอนนี้คือ (identities.h):
// identities.h
# define PASTER2(str) #str
# define PASTER(str) PASTER2(str ## .iden)
# define EVALUATOR(x) PASTER(x)
# define IDENTITIES_FILE EVALUATOR(__FILE__)
# include IDENTITIES_FILE
ตามหลักการแล้ว จะใช้เช่นนี้ (main.c):
//main.c
# include "identities.h"
int main() {return 0;}
ซึ่งจะถูกขยายในการส่งผ่านครั้งเดียวโดยตัวประมวลผลล่วงหน้าก่อนการคอมไพล์เพื่อให้ได้ผลลัพธ์:
//main.c (preprocessed)
# include "main.c.iden"
int main() {return 0;}
การอ้อมสองระดับที่ฉันใช้ (PASTER และ EVALUATOR) เป็นผลมาจาก สิ่งนี้ โพสต์
ขออภัย สิ่งนี้ใช้งานไม่ได้ และฉันยังเหลือข้อผิดพลาด:
obj/win32/dbg/main.o
In file included from main.c:1:0:
identities.h:42:1: error: #include expects "FILENAME" or <FILENAME>
ฉันคิดว่าปัญหาคือคำสั่ง include ไม่มีเครื่องหมายคำพูด .. มีความคิดเห็นใดบ้าง