草庐IT

全局剪枝

全部标签

c++ - 有效地从字符串中读取括号中的两个逗号分隔的 float ,而不受全局语言环境的影响

我是一个图书馆的开发人员,我们的旧代码使用sscanf()和sprintf()从字符串读取/写入各种内部类型。与使用我们的库且其语言环境与我们基于XML文件的语言环境(“C”语言环境)不同的用户遇到了问题。在我们的例子中,这导致从这些XML文件解析出的值不正确,并且在运行时以字符串形式提交了这些值。用户可以直接更改语言环境,但也可以在用户不知情的情况下更改语言环境。如果语言环境更改发生在另一个库(例如GTK)中,而该库是一个错误报告中的“肇事者”,则可能会发生这种情况。因此,我们显然希望从语言环境中删除任何依赖关系,以使自己永久摆脱这些问题。我已经阅读了关于float/double/i

c++ - 头文件中的全局变量导致重新定义错误c++

我有一个包含所有全局变量的头文件(以及一个声明它们的cpp文件)我使用了#ifndef#define#endif标签,但我仍然遇到重定义错误我一共有3个头文件和4个cpp文件,所有header/main.cpp都包含globalvar.h头文件。代码如下:全局变量.h#ifndefGLOBALVAR_H#defineGLOBALVAR_H#include"SDL.h"externconstintSCREEN_WIDTH=960;externconstintSCREEN_HEIGHT=960;externconstintSCREEN_BPP=32;externconstintFRAMES

c++ - C++ 中默认初始化的全局强类型枚举是什么?

我正在尝试确定全局强类型枚举初始化的默认值。下面的代码当然编译不过。#includeusingnamespacestd;enumclassA{a=10,b=20};//Globalstrongly-typedenum,uninitializedAk;intmain(){if(k==A::a)cout“k”初始化为什么? 最佳答案 k具有静态存储持续时间并且静态对象是零初始化的,我们可以通过转到draftC++standard看到这一点3.6.2非局部变量的初始化2段:Variableswithstaticstorageduratio

c++ - C/C++ 中的 dlopen 和全局变量

由于某些限制,我被迫在运行时加载用C编写的库。第三方向我提供了两个库作为静态存档,我们将其转化为共享对象。我正在使用的应用程序会根据一些硬件参数在运行时加载其中一个库。不幸的是,其中一个库主要配置了全局变量。我已经在使用dlsym加载函数引用,但我也可以使用dlsym加载对这些全局变量的引用吗? 最佳答案 是的,您可以使用dlsym访问全局变量(只要它们是导出的,而不是静态的)。下面的示例是在C++和Mac中,但显然C可以正常工作。lib.cpp:extern"C"{intbarleyCorn=12;}使用lib.cpp#inclu

c++ - 模拟静态/全局函数的最佳简单方法?

我有一个简单的几乎类似于值的类,比如Person:classPerson{public:Person(ThirdPartyClass*object);virtual~Person(void);virtualstd::stringGetFullName()const;virtualintGetAge()const;virtualintGetNumberOfDaysTillBirthday()const;};我正在使用第三方库,ThirdPartyClass需要调用一个名为Destroy(第3方库的一部分)的全局/静态函数来毁灭它。此Destroy函数在Person析构函数中调用。现在我正

C++ 理解多线程与全局变量

我有一个声明了一些全局变量的C++程序。之后它split成几个线程来完成几个任务。这些线程读取和写入其中一些全局变量。如果两个线程正在读取同一个变量,是否会出现应用程序崩溃?或者仅当一个线程写入另一个线程当前正在读取的变量时才会出现应用程序崩溃?那么如果我的第二个问题的答案是肯定的,那么下面的代码示例能解决这个问题吗?#include#include#includeusingnamespacestd;mutexm;stringvar="foo";//functiontoprovidereadandwriteaccess//"protected"withmutexstringtest(s

c++ - 初始化全局 <Key, Value> 哈希

我想将QHash初始化为全局变量。因为它是全局性的,所以我不能写类似的东西QHashMY_HASH;MY_HASH["one"]=1;MY_HASH["two"]=2;但我不确定如何在初始化时为MY_HASH赋值。 最佳答案 如果你使用c++0x,你可以使用一个initializer_list,它看起来像这样:QHashMY_HASH({{"one",1},{"two",2}});在gcc中,使用命令行标志-std=c++0x启用c++0x 关于c++-初始化全局哈希,我们在StackO

c++ - 全局构造函数调用不在 .init_array 部分

我正在尝试在嵌入式目标(ARMCortex-M3)上添加全局构造函数支持。假设我有以下代码:classfoobar{inti;public:foobar(){i=100;}voidinc(){i++;}};foobarfoo;intmain(){foo.inc();for(;;);}我是这样编译的:arm-none-eabi-g++-O0-gdwarf-2-mcpu=cortex-m3-mthumb-cfoo.cpp-ofoo.o当我使用objdump查看.init_array部分时,它显示.init_section的大小为零。我确实得到了一个名为_Z41__static_initia

c++ - 在链接时合并全局数组/从多个编译单元填充全局数组

我想定义一组东西,比如事件处理程序。的内容这个数组在编译时是完全已知的,但是定义在多个编译单元,分布在多个库中是相当解耦的,至少在最终(静态)链接之前是这样。我想要也保持这种方式-所以添加或删除编译单元将还可以自动管理事件处理程序而无需修改事件处理程序的中央列表。这是我想做的事情的一个例子(但行不通)。中央.h:typedefvoid(*callback_t)(void);callback_tcallbacks[];中央.c:#include"central.h"voiddo_callbacks(void){inti;for(i=0;ifoo.c:#include"central.h"

c++ - 在头文件中声明静态全局函数

我偶然发现了一段别人写的代码。在头文件中有几个声明为静态的全局函数。函数本身在单独的实现文件中定义。AFAIK,静态函数定义在定义函数的翻译单元之外不可见。如果是这样,在头文件中声明静态函数有什么意义?//insomeheaderfilestaticvoidfoo();//insomeimplementationfilestaticvoidfoo(){........} 最佳答案 嗯,声明为static的函数仅在定义它们的源文件中可见。尽管在单独的header中声明它们并不是一个好主意。我也见过一些开发人员这样做的案例。他们这样做是