Concatenare string in macro
Last Updated: Feb 21 2023 16:13, Started by
GabyF
, Feb 21 2023 10:04
·
0
#1
Posted 21 February 2023 - 10:04
Se pot concatena doua stringuri in macro?
#define PATH "img/" #define M_CONC(A, B) A##B #define BG_IM M_CONC(PATH, "bg.png") Apare un rezultat ciudat img/"bg.png |
#2
Posted 21 February 2023 - 11:04
Muta bg.png la alta definitie gen
#define BGFILE "bg.png" si dupa aia #define BG_IM M_CONC(PATH, BGFILE) |
#3
Posted 21 February 2023 - 11:32
O observatie: NU este nevoie de operatorul ‘token pasting’ pentru literali de tip sir intrucat pe acestia compilatorul ii concateneaza automat fara ca tu sa faci nimic special, atata timp cat intre ei nu exista decat whitespace (comentariile intra si ele in aceasta categorie). Adica "Un"/*inceputul*/ "Doi"/*partea a doua*/ este absolut acelasi lucru cu "UnDoi". La fel, in cazul tau, PATH "bg.png" este exact acelasi lucru cu "img/bg.png" fara sa fie nevoie de nici un macro auxiliar care sa concateneze.
‘Token pasting’ este necesar cand vrei sa creezi identificatori. De exemplu const int M_CONC(constanta, unu) = 1; defineste si initializeaza variabila nemodificabila constantaunu. Fara token pasting nu ai putea crea un identificator ‘din bucati’. |
#4
Posted 21 February 2023 - 15:45
Deci in fisierul .rc am:
BG_ID PNG BG_IM Iar in Resource.h am: #define PATH "img/" #define BG_ID 100 #define BG_IM PATH "bg.png" Raspuns: Quote
1>.\Resource.rc(3) : error RC2135 : file not found: img/ 1>.\Resource.rc(4) : error RC2135 : file not found: PNG 1>.\Resource.rc(5) : error RC2135 : file not found: PNG 1>.\Resource.rc(6) : error RC2135 : file not found: PNG 1>.\Resource.rc(7) : error RC2135 : file not found: PNG 1>.\Resource.rc(8) : error RC2135 : file not found: PNG 1>.\Resource.rc(9) : error RC2135 : file not found: PNG 1>.\Resource.rc(10) : error RC2135 : file not found: PNG 1>.\Resource.rc(11) : error RC2135 : file not found: PNG 1>.\Resource.rc(14) : error RC2135 : file not found: PNG 1>.\Resource.rc(15) : error RC2135 : file not found: PNG 1>.\Resource.rc(16) : error RC2135 : file not found: PNG |
#5
Posted 21 February 2023 - 16:13
Resource Compiler nu foloseste foloseste acelasi preprocesor si nici nu are aceleasi reguli ca si compilatorul de C/C++, este mult mai limitat dar are in schimb alte lucruri mai adaptate situatiei.
Ce am facut eu a fost ca in proiect sa setez ‘Custom Build’ pe fisierele de resurse, apeland mai intai compilatorul de C/C++ cu optiunea de a face doar preprocesarea si a produce fisierul preprocesat si abia apoi compilatorul de resurse pe acest fisier intermediar. cl /Zm200 /I… /D… /DRC_INVOKED /E /TC "%(Filename).rc" >"$(IntDir)%(Filename).rc" rc /I… /Fo"$(IntDir)%(Filename).res" "$(IntDir)%(Filename).rc"
LE: Dupa ceva sapaturi, se pare ca aceasta concatenare nu o face preprocesorul de C/C++ si ramane in sarcina Resource Compiler. Cel din Visual Studio 6 (da, da, cel de prin 1998) nu stie sa o faca, dar cu versiuni mai ne-antice trebuie ca functiona ca altfel nu as fi folosit-o intr-o vreme (la un moment dat am renuntat la ea). Edited by sags, 21 February 2023 - 16:24. |
Anunturi
Bun venit pe Forumul Softpedia!
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users