Saya mencoba mencari cara membuat string variabel untuk pernyataan #include menggunakan GCC.
Idenya adalah bahwa untuk setiap modul sumber yang saya tulis, saya ingin menyertakan sebagai header, sumber C yang dihasilkan secara dinamis, yang dibuat sebelumnya dalam proses pembangunan.
Menghasilkan file ini tidak menjadi masalah. Sayangnya, termasuk itu.
Apa yang saya miliki sejauh ini adalah (identitas.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
Idealnya, ini akan digunakan seperti ini (main.c):
//main.c
# include "identities.h"
int main() {return 0;}
Yang akan diperluas dalam satu lintasan oleh praprosesor sebelum kompilasi untuk menghasilkan:
//main.c (preprocessed)
# include "main.c.iden"
int main() {return 0;}
Dua tingkat tipuan yang saya gunakan (PASTER dan EVALUATOR) adalah hasil dari ini kiriman.
Sayangnya, ini tidak berhasil dan saya mengalami kesalahan:
obj/win32/dbg/main.o
In file included from main.c:1:0:
identities.h:42:1: error: #include expects "FILENAME" or <FILENAME>
Saya pikir masalahnya adalah pernyataan include tidak ada tanda kutipnya.. Ada ide?