Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在C++;-Linux_C++ - Fatal编程技术网

C++ 如何在C++;-Linux

C++ 如何在C++;-Linux,c++,C++,我希望能够获取当前源文件路径 string txt_file = CURRENT_FILE_PATH +"../../txt_files/first.txt"; inFile.open(txt_file .c_str()); 有没有办法获取当前的文件路径? 我不是指可执行路径。我指的是运行代码的源文件的当前位置 非常感谢, Giora.用于编译源文件的路径可以通过标准C宏\uuuuu file\uuuu访问(请参阅) 如果将绝对路径作为编译器的输入(至少对于gcc而言)\uuuuu FILE\

我希望能够获取当前源文件路径

string txt_file = CURRENT_FILE_PATH +"../../txt_files/first.txt";
inFile.open(txt_file .c_str());
有没有办法获取当前的文件路径? 我不是指可执行路径。我指的是运行代码的源文件的当前位置

非常感谢,
Giora.

用于编译源文件的路径可以通过标准C宏
\uuuuu file\uuuu
访问(请参阅)

如果将绝对路径作为编译器的输入(至少对于gcc而言)
\uuuuu FILE\uuuu
将保留文件的绝对路径,反之亦然。其他编译器可能略有不同

如果您正在使用GNU Make,并且在变量
source\u files
中列出了源文件,如下所示:

SOURCE_FILES := src/file1.cpp src/file2.cpp ...
您可以确保文件由其绝对路径给定,如下所示:

SOURCE_FILES := $(abspath src/file1.cpp src/file2.cpp ...)

C++20
源位置::文件名

除了
\uuu文件
,我们现在还有另一种方法,不用使用旧的C预处理器:

文件只是说:

constexpr const char*文件名()const noexcept

5返回:表示的当前源文件(14.2)的假定名称 将此对象作为NTB

其中,NTBS表示“以Null结尾的字节字符串”

当对GCC的支持到达时,我会尝试一下,带有
g++-9-std=c++2a的GCC 9.1.0仍然不支持它

索赔用途如下:

#include <iostream>
#include <string_view>
#include <source_location>

void log(std::string_view message,
         const std::source_location& location std::source_location::current()
) {
    std::cout << "info:"
              << location.file_name() << ":"
              << location.line() << ":"
              << location.function_name() << " "
              << message << '\n';
}

int main() {
    log("Hello world!");
}

你的要求似乎不清楚。当前工作目录由
getcwd()
给出,源文件的路径可以通过
\uuuuuu file\uuuuuu
宏访问。您询问模块意味着可执行文件,因此您需要工作目录。这是它的答案可能是:模块不正确。我想要源文件的路径。文件正在为我提供相对路径。我想要完整的路径。对于Windows,请参阅;对于Linux/OSX,请参阅。答案是使用realpath()函数。我已经试过了,但它需要一个相对路径来开始。我没有。我对源文件位置“一无所知”。
info:main.cpp:16:main Hello world!