#define PATH "yagh/headers/"
#define FILNAME "includefile"
#define CONCAT(a__, b__) CONCAT_DO(a__, b__)
#define CONCAT_DO(a__, b__) a__##b__
#define CONCATTHREE(a__, b__, c__) CONCAT(CONCAT(a__, b__), c__)
#define STRINGIFY(a__) #a__
#include STRINGIFY(CONCATTHREE(PATH ,FILNAME ,.h));
Этот макрос отлично работает в компиляторе VS, но не компилируется в компиляторе GCC:
Ошибка: ошибка: вставка «/» и «включаемый файл» не дает действительного токена предварительной обработки.
а для некоторых включаемых файлов выдает ошибку:
Ошибка: вставка "включаемого файла" и "." не дает действительный токен предварительной обработки
##
не работает со строковыми литералами, такими как"foo"
в GCC. Что именно вы пытаетесь сделать с этим макросом? - person thkala   schedule 12.01.2011unable to find include file "CONCATTHREE(PATH ,FILNAME ,.h)"
, что я и вижу, когда запускаю ваш код через gcc ... - person Chris Dodd   schedule 07.11.2013