29得票4回答
C和C++中默认全局变量的链接性、多次声明和定义问题

例如: 代码1.c / .cpp int a; // ... and so on code2.c / .cpp int a; int main(void) { return 0; } 前往编译: $gcc code1.c code2.c # this is...

29得票6回答
为什么模板不能在extern "C"块内?

这是对一个答案的跟进问题,该答案回答了是否可能在模板内typedef指向extern "C"函数的指针类型? 这段代码无法通过g++、Visual C/C++和Comeau C/C++的编译,错误信息基本相同: #include <cstdlib> extern "C" { ...

27得票3回答
C和C++中结构体ODR规则的差别澄清

我知道ODR、链接、static和extern "C"与函数的工作原理。但是我不确定类型的可见性,因为它们无法声明为static且在C中没有匿名命名空间。 特别是,如果编译为C和C++,我想知道以下代码的有效性。// A.{c,cpp} typedef struct foo...

26得票5回答
程序静态链接到库,但仍需要dll才能运行。

涉及到链接时有些事情我不是很明白...我正在使用第三方库GEOS来编写程序。这个程序依赖于geos.lib,但仍然需要geos.dll才能运行。 我读了这个问题,我认为我理解了静态库和动态库之间的区别。但我不明白的是,为什么当我静态链接一个库时,仍然需要一个dll。

26得票2回答
依赖属性取决于另一个属性。

如何注册一个依赖属性,其值是使用另一个依赖属性的值计算出来的? 因为在运行时,WPF会绕过.NET属性包装器,所以不应在getter和setter中包含逻辑。解决方案通常是使用PropertyChangedCallback。但这些是静态声明的。 例如,如何正确完成这个假想任务:public...

26得票5回答
未命名的命名空间对全局变量有什么影响?

这两者之间有什么不同? cpp 文件:namespace { int var; } 或者int var; 如果两者都放在cpp文件中,是否正确将变量放在匿名命名空间中,以使其仅对该文件私有?但是,如果我们将全局变量放在cpp文件中,那么该变量不也是私有的,因为您永远不会包含.cpp文件吗?

24得票2回答
std::piecewise_construct会导致ODR违规吗?

std::piecewise_construct是在头文件<utility>中定义的,并且由于声明为constexpr,因此具有内部链接。我想知道在头文件中使用std::piecewise_construct是否会违反ODR(One Definition Rule)。例如: a....

24得票4回答
一个变量是否可以同时声明为static和extern?

为什么以下代码无法编译?... extern int i; static int i; ... 但如果您颠倒顺序,它会编译成功。... static int i; extern int i; ... 这里发生了什么事?

22得票1回答
头文件中的constexpr全局常量和odr问题

很不幸,我对constexpr、在头文件中声明的全局常量以及odr感到有些困惑。简而言之:我们能否从这里得出结论:https://isocpp.org/files/papers/n4147.pdf那么constexpr MyClass const MyClassObj () { return ...

22得票5回答
静态与extern "C"/"C++"的区别

静态成员函数和extern "C"链接函数有什么区别?例如,在C++中使用“makecontext”时,需要传递指向函数的指针。Google建议使用extern "C"链接函数,因为“makecontext”是C函数。但我发现使用静态函数也可以。我是幸运的还是... class X { ...