ISO-C стандарт (в настоящее время C11) это сказать о содержании __FILE__
предопределенного макроса:
__FILE__
: Предполагаемое имя текущего исходного файла (строка символов литерал).
И вот об этом. Нет мандата на формат контента, поэтому я подозреваю, что реализация, вероятно, может уйти с установкой его на "some file I found in the /src tree"
и все еще требовать соответствия.
Так что это в основном до реализации того, что оно там помещает. Вам нужно будет изучить конкретные реализации, чтобы увидеть, как они справляются с этим. gcc
компилятор, например, использует файл именно так, как указано в командной строке, если вы хотите полный путь, это командная строка вам придется изменить, что-то вроде:
gcc -o myexec $(pwd)/myexec.c
Это интересно отметить, что gcc
, похоже, делает напротив для входящих файлов. При использовании:
#include "myheader.h"
__FILE__
макрос устанавливается в полной мере расширения файла заголовка.
Если у вас есть реализация, которая не набор __FILE__
в порядке, вам нужно, то ничего не мешает вам создать свой собственный что-то вроде:
dodgycc -o myexec -DMY_FILE_NAME=$(pwd)/myexec.c myexec.c
(где -D
вариант компилятора dodgycc
определяет токен препроцессора, который вам нужен).
'__FILE__' просто передает все, что вы передали gcc; поэтому вы можете сделать это: 'gcc $ (pwd)/filename.c' –
http://stackoverflow.com/questions/1591873/how-do-i-write-a-cpp-dir-macro-similar- to-file –
спасибо, поняли. – user3317205