Próbuję wygenerować nazwę pliku włączającego w makrze. To ma być prawnym w C++:Generowanie nazwy pliku włączającego w makrze
#define INCLUDE_FILE "module_impl_win.hpp"
#include INCLUDE_FILE
to działa dobrze, ale jak tylko próbuję generowanej nazwy pliku to failes skompilować
#define INCLUDE_FILE(M) M##"_impl_win.hpp"
#include INCLUDE_FILE("module")
Właściwie to daje mi ostrzeżenie na MSVC2010
warning C4067: niespodziewane tokeny następujące dyrektywy preprocesora - oczekiwać NEWLIN
, ale nie uwzględnia pliku.
Na czym polega problem? Jak mogę się go pozbyć?
Trzeba być ostrożnym z tym podejściem.'_impl_win' jest tokenem identyfikatora, a ponieważ zaczyna się od podkreślenia (i znajduje się w przestrzeni nazw makr), jest zarezerwowane dla implementacji. Powinieneś odciąć wiodące '_' i połączyć je oddzielnie, ale poza tym nie jestem pewien jak to zrobić, ponieważ' _' sam jest zarezerwowanym identyfikatorem. –
BTW, jak to jest przenośne? – ledokol
@ James McNellis: Standard zastrzega sobie tylko nazwy z podkreśleniem, a następnie wielką literą (lub nazwami zawierającymi podwójne podkreślenie). Nie wiem, dlaczego Sutter zaleca unikanie wszędzie podkreślenia. – ledokol