__PRETTY_FUNCTION__
是一个预编译器宏,主要用在C++中。这个宏会被编译器替换为当前函数的完整签名,包括函数名、参数类型列表以及所属类名(如果是类的成员函数的话)。
这个宏常用于调试,因为它可以帮助开发者确定正在执行的具体函数。例如,可以将其用于日志记录,以跟踪函数的调用情况。
例如:
void someFunction(int a, double b)
{
std::cout << __PRETTY_FUNCTION__ << " called with " << a << " and " << b << std::endl;
}
在这个例子中,如果调用 someFunction(3, 4.2)
,则会打印出如下信息:
void someFunction(int, double) called with 3 and 4.2
需要注意的是,__PRETTY_FUNCTION__
是GCC编译器特有的,其他编译器可能不支持,或者提供了类似的但名字不同的宏。例如,在Visual C++中,相应的宏是__FUNCSIG__
。
__FUNCSIG__ 打印的方式和__PRETTY_FUNCTION__略有不同,可自行测试。
_PRETTY_FUNCTION__
是一个编译器特定的宏,主要在GCC和Clang编译器中使用。这个宏不是C标准的一部分,所以并不能保证所有C编译器都支持它。
C标准中提供了 __func__
这个宏,它可以被所有支持C11及以上版本的编译器识别。然而 __func__
只返回函数的名称,而不包括类名或参数类型等信息。如果你需要一个跨编译器的解决方案,__func__
可能是个不错的选择。但如果你需要更详细的信息,且你的代码只需在GCC或Clang上运行,那么 __PRETTY_FUNCTION__
是个好的选择。
在C++20标准中,提出了一个新的特性叫做source_location,它提供了一个标准的、可移植的方式来获取源代码的位置信息,包括文件名、行号、函数名等。不过,source_location还没有被所有编译器支持。
std::source_location
是C++20新增的一个库,它提供了源代码位置的信息,主要包括以下几个部分:
line()
:返回源代码的行号。column()
:返回源代码的列号。file_name()
:返回源代码的文件名。function_name()
:返回函数的名称。
它可以用于提供更准确的诊断信息,以帮助定位问题。下面是一个简单的使用示例:
#include <iostream>
#include <source_location>
void log(const char* 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!");
return 0;
}
在这个例子中,log
函数会输出消息以及调用它的源代码位置。
std::source_location
是在 C++20 标准中引入的。目前,GCC 11 和更新版本的 GCC 支持 std::source_location
。
在 Ubuntu 上,你可以使用以下命令来安装或更新到最新的 GCC 版本:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-11 g++-11
安装或更新 GCC 后,你可以使用 -std=c++20
或 -std=gnu++20
选项来启用 C++20 支持:
g++-11 -std=c++20 your_file.cpp
注意,虽然 GCC 11 支持 C++20,但某些特性可能仍然存在问题或尚未完全实现。具体情况请参考 GCC 官方文档。
如何在 Ubuntu 上安装或更新 g++。以下是如何进行的一些指导:
g++ --version
- 打开终端。
- 首先,您可以通过运行以下命令来检查您当前的 g++ 版本:
g++ --version
- 如果您要安装 g++,可以运行以下命令:
sudo apt-get install g++
- 如果您要更新 g++,您可以首先添加 Ubuntu 工具链测试库,然后安装新的 g++ 版本。例如,如果您要安装 g+±11,可以运行以下命令:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt-get update sudo apt-get install g++-11
- 安装新版本的 g++ 后,您可以使用
update-alternatives
来配置默认的 g++ 版本。例如,如果您有 g+±9 和 g+±11,您可以运行以下命令来设置 g+±11 为默认版本:
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 10
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 20
sudo update-alternatives --config g++
在 --config
命令中,您将看到一个列表,您可以从中选择默认的 g++ 版本。
如果要在Ubuntu中降级安装特定版本的g++,可以按照以下步骤进行:
首先,打开终端。
输入以下命令查看系统上的所有可用版本:
apt-cache show gcc | grep Version
从列表中选择你需要的版本。
输入以下命令删除当前的g++版本:
sudo apt-get remove g++
输入以下命令安装你需要的版本,例如安装g+±7:
sudo apt-get install g++-7
然后你可以通过以下命令设置系统默认的g++版本:
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 60
这个命令的意思是在
/usr/bin/g++
和/usr/bin/g++-7
之间建立一个链接,60是优先级,数字越大优先级越高。如果你有多个版本的g++,你可以使用以下命令切换版本:
sudo update-alternatives --config g++
然后根据提示选择你需要的版本。
注意:降级安装可能会导致某些依赖于更高版本g++的程序或库无法正确运行。