草庐IT

局部剪枝

全部标签

c++ - C中函数的局部变量范围

当我开始使用C编程时,我听说过以下场景。“尝试从外部访问,函数局部变量将导致错误(或垃圾值)。因为当我们从函数返回时堆栈被清除”但是我下面的代码示例打印了50的值。我正在使用最新的GCC编译器编译代码。#includeint*left();intmain(){int*p=left();printf("%d\n",*p);return0;}int*left(){inti=50;return&i;}在这个问题上启发我。我能知道C++中的行为吗??是不是类似于c.. 最佳答案 变量“i”在堆栈上创建,当函数“left”返回时,堆栈被清除。

c++ - GDB中基于局部变量存在性的流量控制

我正在尝试编写一个GDB脚本(遗留的,而不是Python),它将打印有关局部变量(C或C++结构)成员的信息,但前提是该局部变量存在。像这样的东西:#'magic'shouldbeevaluateto"if'infolocals'hasavariablenamedfoo,then#evaluatetotrue,otherwiseevaluatetofalse.if(magic)printfoo->memberend我知道这有点做作,因为局部变量依赖于堆栈框架(所以我最好让它以框架为条件),但我仍然想知道这些方面是否可行. 最佳答案

c++ - LLDB 为局部变量给出 "use of undeclared identifier"错误

在以下函数中,我无法在LLDB中看到“recordMap”。for循环打印键,recordType设置正确,但'precordMap'给出错误“使用未声明的标识符”。我可以在LLDB中看到变量“recordType”,所以我在正确的范围内。当我在LLDB中输入“recordMap”时,它会自动完成,就好像它就在那里一样。我已将调试和发布的优化设置为“无”。这可能是什么!?voidMezNetworkController::showRecord(std::maprecordMap){for(autoitem:recordMap)printf("KEY:%s\n",item.first.c

c++ - 静态和动态初始化是否仅适用于非局部变量?

代码如下:intfactorial(intn){if(n(从here窃取)所以对我来说,为什么b是动态初始化的而a是静态初始化的,这对我来说很有意义。但是如果a和b有自动存储持续时间(也许它们已经在main()中初始化),你还能这样吗?将它们的初始化称为静态还是动态?因为对我来说,它们听起来更像是初始化的通用名称,而不是例如复制初始化。此外,我已阅读this谁能告诉我为什么他们没有直接解释什么是静态和动态初始化?我的意思是,看起来他们只是解释了他们在什么情况下发生,但也许这是有原因的?cppreference指出初始化程序可能会调用(一些初始化,如值初始化等),但在本文后面,他们提到了

c++ - 我们需要原子地增加线程局部变量吗?

下面是LLVM的libcxxabi中的函数:void*__cxa_current_primary_exception()throw(){//getthecurrentexception__cxa_eh_globals*globals=__cxa_get_globals_fast();if(NULL==globals)returnNULL;//Iftherearenoglobals,thereisnoexception__cxa_exception*exception_header=globals->caughtExceptions;if(NULL==exception_header)r

c++ - 线程安全局部变量

voidHelloWorld(){staticstd::atomicstatic_counter=0;shortval=++static_counter;//orval=static_counter++;}如果这个函数被两个线程调用,局部变量val是否可以在两个线程中都为1?或(如果使用static_counter++则为0?) 最佳答案 Canthelocalvariablevalbe1inboththreads?没有。++static_counter等同于:fetch_add(1)+1不能为两个(或更多)线程返回相同值因为fet

c++ - 如何解决用于在 C++ 中维护静态局部变量的服务数据的线程安全问题?

考虑以下场景。我们有一个带有静态局部变量的C++函数:voidfunction(){staticintvariable=obtain();//blahblablah}该函数需要从多个线程并发调用,所以我们添加一个临界区以避免并发访问静态本地:voidfunctionThreadSafe(){CriticalSectionLockClasslock(criticalSection);staticintvariable=obtain();//blahblablah}但这就足够了吗?我的意思是有一些魔法可以使变量只被初始化一次。因此,运行时维护了一些服务数据,指示每个静态本地是否已经初始化。

c++ - 静态局部变量的线程安全增量

voidfoo(){staticintid=0;constintlocal_id=id++;//dosomethingwithlocal_id;}多个线程可以多次并行调用foo。我希望foo的每次调用都使用local_id的“唯一”值。上面的代码可以吗?我想知道在第一个线程增加值之前,第二个线程是否将id的值分配给local_id。如果不安全,是否有任何标准解决方案? 最佳答案 您的代码不是线程安全的,因为多个线程可以同时读取id,并产生相同的local_id值。如果你想要一个线程安全的版本,使用C++11中可用的std::atom

C++ 通过引用局部变量传递

我是c++新手我有以下类(class):classUser{public:User(conststring&username){m_username=username;}stringusername()const{returnm_username;}voidsetUsername(conststring&username){m_username=username;}private:stringm_username;};这是main.cpp代码User*createUser(){stringusername="someUser";User*u=newUser(username);retu

objective-c - 如何为计算器编写自定义局部 View 或 subview ?

我正在构建一个基本的计算器应用程序。该计算器已经具备了基本功能的全部功能。我遇到的问题是屏幕上没有足够的空间来添加其他更高级的功能。理想情况下,我想做的是创建某种子类和View,当按下屏幕底部的按钮时,它会向上滑动到标签的底部(显示完成的计算的地方)。换句话说,我想要一个包含更多运算符和计算选项的View向上滑动到标签的底部,我不希望这个View覆盖标签中显示的任何数字。有什么办法可以做到这一点吗? 最佳答案 是的,你可以。按下按钮时,创建新View(具有额外功能),将其作为subview添加到self.view,并为其框架设置动画