来自:https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html
-fexceptions
:启用异常处理.生成传播异常所需的额外代码.对于某些目标,这意味着GCC为所有函数生成帧展开信息,
-funwind-tables
类似于-fexceptions
,它只是生成任何所需的静态数据,但不会以任何其他方式影响生成的代码.您通常不需要启用此选项; 相反,需要此处理的语言处理器代表您启用它.
有人可以解释一下-funwind-tables
"任何需要的静态数据"是什么意思.他们指的是什么数据.为什么需要生成数据?如果没有生成数据会怎么样?这些数据用于哪里?
它也说"类似于-fexception
".所以我认为它也会生成帧展开信息.什么是帧展开信息?谁使用框架信息以及如何使用?
在一些SO帖子中,我读到必须使用此标志编译程序_Unwind_Backtrace
才能正常工作.请解释如何_Unwind_Backtrace
使用生成的信息-funwind-tables
.
最近我观察到,在 Clang 9.0 上,alignof和__alignof返回unsigned long long的不同值,并且在https://reviews.llvm.org/D54814上也讨论了同样的问题:
从 Clang 8.0 和 GCC 8.0 开始,在相同情况下返回不同的值
alignof
。__alignof
具体而言alignof
,and_Alignof
返回类型的最小对齐方式,其中 as__alignof
返回首选对齐方式。
我了解类型对齐,但从未遇到过“最小对齐”和“首选对齐”。
有人可以帮我理解这些到底是什么以及有什么区别吗?谢谢。
我有一个名为 Student 的类,我正在主程序中创建一个实例 Alex。创建实例 Alex 时,是否可以打印“正在创建 Alex”。如果变量名是“Joe”,它应该打印“Joe is being created”。
这是我的类定义
class Student
{
public:
int rollNo;
string address;
Student(int rollNo, string address)
{
this.rollNo = rollNo;
this.address = address;
}
//setter , getter functions.
};
Run Code Online (Sandbox Code Playgroud)
// 在主程序中
Student Alex;
Student Joe;
Run Code Online (Sandbox Code Playgroud)
注意1:是的,我们可以在 Student 类中使用变量“name”并在实例化它时传递名称 Alex/Joe 并根据需要在构造函数中打印。但这不是我的情况。我纯粹不想传名字
我的代码调用函数__atomic_add_fetch中有一条指令。编译此代码时,出现如下编译错误
错误:未定义对'__atomic_fetch_add_8'的引用
我真的不明白为什么我在调用__atomic_add_fetch时会抛出对__atomic_fetch_add_8的未定义引用。有人可以帮我理解在编译此代码时到底发生了什么吗?
注意:我特别希望了解“内部发生了什么,将__atomic_add_fetch转换为__atomic_fetch_add_8”。不是解决编译问题的解决方案。
当我使用clang ++ 5.0版编译以下程序时,结果是
错误:函数的初始值设定项看起来不像纯说明符
extern void print(void *ptr);
#define NULL __null
class IInterface
{
public:
virtual void method1() = NULL;
};
int main()
{
void *ptr = NULL;
print(ptr);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
似乎__null
不被clang支持吗?但是stackoverflow中的一些帖子建议clang支持__null
。如果是这样,我为什么会收到此错误。有人可以建议这里发生了什么吗?
在检查libc ++代码时,我看到ndk分配器__allocate
函数正在调用__builtin_operator_new
,但是我在libc ++代码中找不到它的定义。
顾名思义,它是内存分配功能。但是谁来实现呢?它是由clang,gcc等编译器定义的吗?在哪里可以找到它的定义?
c++ ×6
clang ×3
gcc ×2
android-x86 ×1
atomic ×1
backtrace ×1
c ×1
c++14 ×1
clang++ ×1
compilation ×1
libc++ ×1
llvm-clang ×1