如何解决"在空白上无用使用变量"的情况? 例如: my $err = $soap_response->code, " ", $soap_response->string, "\n"; return $err; 我会收到诸如"在无效上下文中无用的变量使用"之类的警告?为什么?我该如何解决? 解决方案 如果您想加入参数,请使用"."操作员或join: my $err = $soap_response->code. " ". $soap_response->string. "\n"; my $err = join '', $soap_response->code, " ", $soap_response->string, "\n"; 接下来是为什么Perl给您警告的原因. 您正在分配给标量变量$err,并且在标量上下文中评估了分配的右侧. 二进制" ,"是逗号操作员.在标量上下文中,它在void上下文中评估其左参数,将价值扔掉,然后在标量上
以下是关于 void 的编程技术问答
我已经看过从语法角度来看,"挥发性"关键字在C ++函数中具有多少用法?关于函数上挥发性关键字的使用,但没有明确解释该问题的情况1.只有一位受访者的陈述似乎毫无意义/无用. 但是我不能完全接受该语句,因为GNUC的AES软件实现已经使用了几年了,并且它们具有许多这样的功能: INLINE volatile void functionname( /* ... */ ) { /* ... */ asm( /* ... */ ) // embedded assembly statements /* ... */ } 必须有这种用法的原因.任何人都可以: a .告诉我最初的原因是什么;和 b .现在如何实现所需的效果? 我正在使用ubuntu,gcc 4.6.3. 注意:最接近我的解释是,在GCC 2.5之前,您可以通过以下内容欺骗2.5中实现的" Noreturn"属性: void fatal( /* ... */ ) {
void变量无事可做,而且void指针只能用铸造指向. 因此,当我们实际上不知道要指向哪种数据类型时,使用Void指针.但是什么是无效变量? 有实际示例? 解决方案 在C void中不能被视为数据类型,它是用作占位符代替数据类型的关键字,以表明实际上没有数据. 例如,考虑函数void f(void);.在这里,关键字void用于表示没有传递的任何参数并返回值. 但void *ptr;的含义不同. 此声明指针而不指定指向哪种数据类型. 其他解决方案 没有空隙变量,但是有空隙指针. 正如其他人所提到的那样,我想提醒您在使用无效指针之前打字. float generic_add(void *n1, void *n2){ return *((int *) n1) + *((float *) n2); } 当我们对确切的数据类型不了解时, 其他解决方案 void Pointer对于内存分配目的非常有用.尝试编写自己的malloc,以了解
我用void Pointers编写了这个双重链接列表 typedef struct list_el { void *data; struct list_el *prev; struct list_el *next; } list_el; typedef struct linked_list { int n_el; /*number of elements*/ list_el * head; /*pointer to the head*/ list_el * tail; /*pointer to the head*/ } linked_list; 我写了这些功能来处理它. /*for list_el allocation*/ list_el * new_el ( void ) { return (list_el *) m
我想知道为什么在将地址的内容打印在内存中,即使我们告诉printf()函数如何解释数据内存? 假设我们有以下代码: int main (void) { void* c = malloc(4); printf("%d",*c); return 0; } 为什么不可能这样做? 可以清楚地表明我的问题是无法做到这一点的原因是什么? 编辑: 在所有答案和研究之后,我仍然没有确切地确定汇编中的致命错误在哪里.我感到困惑的主要原因是我的编译器(GCC)只会在说"删除无效指针"时发出警告.这是实际错误吗?据我所知,即使警告仍应编译该程序. edit2 我仍然对我们有错误和警告的原因感到困惑,该警告似乎是完全分开的,但由同一件代码生成: pointer.c:7:13: warning: dereferencing 'void *' pointer
在哪种情况下,我们应该更喜欢一个void指针,而不是char指针或反之亦然? 事实上,两者都可以类型为任何数据类型. 解决方案 a void指针是指"任何类型"的指针,并且需要将其转换为指向实际类型的指针. 指向char的指针是指向char的指针,恰好具有您也可以通过它访问其他类型的属性. 当含义为"任何类型"(或几种类型等)时,您应该使用void *.当您访问A char(显然)或其他类型的单个字节时,应使用char *作为RAW BYTES . . 其他解决方案 使用void * 当您只想指向某个地址的指针而不在乎那里的内容时.例如,Malloc分配动态内存和Malloc不在乎您分配内存的类型,因此Malloc返回Void* - 只是指向某些内存的指针. 但请记住,标准禁止禁止用于void*的指针算术,并且您不能放弃void*,并且还有其他限制对于void*.因此,您最好总是将无效的*施放给一些有意义的指针,以避免问题. 使用char
考虑以下C#函数: void DoWork() { ... } c#文档状态: 当用作方法的返回类型时,void指定方法不返回值. 这似乎足够简单,在大多数情况下,它适合公平的定义. 但是,对于许多低级语言(即c)" void"的含义略有不同.具体而言,所有代码块都必须返回 .因此,void是零指针的表示,它是"无"的表示.在这种情况下,您不需要在代码中具有return语句,因为任何不返回值的块插入都会自动返回null指针. 这是c#做什么还是调用void函数时,它是否执行代码块并返回,甚至没有指针包含一个void的值? 解决方案 首先,C#被编译到IL中,因此最终的表示形式可能会有所不同. 使用空隙方法,IL中的方法签名将标记为void,并且ret opcode仍然存在.这意味着,从IL的角度来看,呼叫堆栈上的"返回"值可能存在,也可能不存在,但将永远不会在呼叫站点上复制和使用. ret opcode仅在存在返回值的情况下才能推动
因此,我在我的C ++应用中使用了此C库,其中一个功能返回一个void*.现在,我不是最尖锐的纯C,但听说一个可以施放给其他 *型的void *.我也知道我希望从此功能的某个地方浮出水面. 因此,我将void*施放到浮点*上,然后将浮点*放电,崩溃.该死! 我调试代码,在GDB中,让它评估(float)voidPtr and Low,并且看到值是我的期望和需要的! 但是,等等,在编译时间内是不可能的.如果我写float number = (float)voidPtr;它不编译,这是可以理解的. 现在的问题,我如何使我的漂浮物从这个易碎的void*? 中. 编辑:多亏了H2CO3,这得到了解决,但是我看到很多答案和评论出现和消失,不相信我可以(float)voidptr在GDB中.这是屏幕截图. 解决方案 尝试使用指针: void *theValueAsVoidPtr = // whatever float flt = *(float *)&theVa
来自oo(c#,java,scala)i我非常重视代码重用和类型安全的原理.以上语言的类型参数可以完成工作,并启用既有类型安全又不浪费"浪费"代码的通用数据结构. 当我陷入C中时,我知道我必须做出妥协,我希望它是正确的.我的数据结构在每个节点/元素中都有一个void *,我会失去类型的安全性,或者我必须为要使用它们使用的每种类型的结构和代码编写. 代码的复杂性是一个显而易见的因素:通过数组或链接列表进行迭代是微不足道的,并且将*next添加到结构上没有额外的努力;在这些情况下,不尝试重新使用结构和代码是有意义的.但是对于更复杂的结构,答案并不是那么明显. 也有模块化和可检验性:将类型及其操作与使用结构的代码分开,使测试更加容易.逆也是如此:在结构试图做其他事情时,测试某些代码的迭代会变得凌乱. 那么您的建议是什么? void *以及重复使用或类型安全和重复的代码?有什么一般原则吗?我是否试图在不合适的情况下将其迫使OO进入程序? 编辑:请不要推荐C ++,我
我在Swift2中创建应用程序时遇到麻烦. 该应用具有狼的图像,每0.4秒更改一次以揭示跑步的狼. 但是,我在Swift 2中有BOOL错误,我无法修复. 我也有声明空白功能的问题. 任何帮助,将不胜感激. @IBAction func startRunnng(sender: UIButton) { tmrRun = NSTimer.scheduledTimerWithTimeInterval(0.4, target: self, selector: "update", userInfo: nil, repeats: true) btnGo.userInteractionEnabled = NO; btnStop.userInteractionEnabled = YES; sliSpeed.userInteractionEnabled = NO; } @IBAction func stopRunnng(sender: UIButton) { tmrRun invalidate
我在空白的行上遇到了这个错误,说明sliderdidchange的未申报的标识符可以帮助我,我可以找到任何答案. h.文件 // // LightViewController.h // Flash Light // // Created by John Whitney on 12-07-27. // Copyright (c) 2012 Perfect Programs. All rights reserved. // #import #import @interface LightViewController : UIViewController { IBOutlet UISlider *slider; IBOutlet UISlider *theslider; IBOutlet UISlider *customslider; UIButton *onButton; UIB
Class Player { Player setName(String name){ this.name = name; return this; // or void setName(String name){ this.name = name; }} 嗨.如果我将方法与" void"或"返回此"语句使用有什么区别?为什么存在"返回此"陈述,如果这样做? 解决方案 为什么存在"返回此"语句,如果执行相同的话? 他们不会远程做同样的事情. 一个void方法没有返回值.这意味着您无法使用返回值(例如,您无法将其分配给变量). 具有返回值的方法具有返回值.在您提到的特定情况下,return this,它正在返回对该方法所调用的对象的引用,因此您可以(潜在地)通过将其分配给变量,通过在其上调用其他方法来使用该参考等等.这对于 流利的界面 (可以允许您做很多链接): theObject.doThis().thenDoThat().thenDoSome
部分A 我正在尝试使用我的基类" Shape"中的功能,并使用派生的类"矩形"来创建我的类" bigretectangle"中的较大矩形.我想在班级内进行我的双方转换,而不是主要的,我该怎么办?谢谢! #include using namespace std; // Base class Shape class Shape { public: void ResizeW(int w) { width = w; } void ResizeH(int h) { height = h; } protected: int width; int height; }; // Primitive Shape class Rectangle: public Shape { public: int width = 2; int height = 1;
我有一个理论问题:但是,必须在.h中声明每种方法和ibaction ???因为如果我在.m中编写一个方法(void),而不是在.h中没有问题. 解决方案 如果您想从另一个类访问一个函数,您将导入该.H标题文件,以使您的编译器了解在哪里可以找到这些功能以及如何翻译它们. 其他解决方案 这是如何实现您的课程的指南. 在" C"术语中考虑一下.您在.h(header)文件中定义了原型,并在.c或在这种情况下进行.m文件. . 两种方式都可以工作,只是不要在.m ... 中重新定义它 其他解决方案 否,它们不需要在标题中声明. 试图按类别或扩展制作方法"私有"时,通常会省略标题的声明.这比将标题中的人宣布为私人是有争议的,这是有争议的,并且取决于使用您的对象的人. 也很好地声明与单独标头中的基本类型无关的类别.
我正在创建一个计划,模拟某些人在湖中捕获鱼类,我已经为鱼和池塘创建了课程,我正在参加Fisher课程,并且方法不起作用,我将显示代码(我'编程的新手,所以我不确定我是否提供足够的信息) public class Fisher { public static int LIMIT = 3; private String name; private Fish[] fishCaught = new Fish[LIMIT]; private int numFishCaught; private int keepSize; public Fisher(String name, Fish[] fishCaught, int numFishCaught, int keepSize) { this.name = name; this.fishCaught = fishCaught; this.numFi
最烦人的解析是源于关于是否使用void作为函数声明的参数的歧义,没有参数? 作为一个例子,以下代码没有错误编译,并且在G ++(v7.2.1)和Xcode(Apple LLVM版本7.0.2(Clang-700.1.81)上都可以运行正常. #include int asdf(void); int asdf(int a) { return a; } int main() { std::cout 6 return 0; } 这一直返回到ANSI-C标准和之前,其中一个空参数列表指示任意数量的参数.今天,它以编译器的落后兼容性困扰着我们,这似乎对这个问题有些困惑.以上不是至少发出警告,如果不引发错误? 在这里,我有一个顿悟(或者也许是一个白日梦!).难道最烦人的解析根源于关于在空函数声明列表中使用void的歧义吗? 另一个示例,引用以下wikipedia示例
我正在尝试创建一个自定义类以单击图片.在其中,我想创建返回UIImage的clickPicture函数.但是,captureStillImageAsynchronously是void.如何从中返回我收到的图像?谢谢. func clickPicture() -> UIImage? { if let videoConnection = stillImageOutput?.connection(withMediaType: AVMediaTypeVideo) { videoConnection.videoOrientation = .portrait stillImageOutput?.captureStillImageAsynchronously(from: videoConnection, completionHandler: { (sampleBuffer, error) -> Void in if sampl
我在界面中具有此功能,它在DB中创建了一个新的PlayersBadge条目.我必须写单位测试,我被卡住了. public void Badge(int pID, int bID, int gID = 0) { var list = EliminationDbContext.PlayerBadges.Where(x=>x.Badge.BadgeID.Equals(bID) && x.Player.PlayerID.Equals(pID)); //if player doesn't have Badge create new Badge if (list.Any() != true) { PlayerBadge b = new PlayerBadge { PlayerID = pID, BadgeID = bID, DateEarned = D
我一直在尝试使用swig将使用ioctl()填充以下结构的简单库缠绕: struct data { header* hdr; void* data; size_t len; }; 数据是指向缓冲区的指针, len 是该缓冲区的长度. 我无法弄清楚如何将数据转换为python字符串(或数组).此外,我需要一种方法来释放灾难中的缓冲区.任何建议都将受到赞赏. 解决方案 由于您在Q的标题中说"或其他",如果您选择使用 ctypes ,您可以用c_void_p>表示void*(CTYPES'基本数据类型和访问功能,例如cruntime库(只要长达和memcpy)后者可作为DLL/.So Dynamic库可用,但是如今确实如此).要获得一个可变的角色缓冲区,您可以memcpy数据,请使用当然,您可以或者可以使用Python C API- A>是您在这种情况下要使用的用来从您的void*和长度制作字节数组副本(当然,您当然可以在适当的时候直接调用free,因为无论