问题列表 - 第1586页

函数指针转换为不同的签名

我使用函数指针的结构来实现不同后端的接口.签名非常不同,但返回值几乎都是void,void*或int.


struct my_interface {
    void  (*func_a)(int i);
    void *(*func_b)(const char *bla);
    ...
    int   (*func_z)(char foo);
};
Run Code Online (Sandbox Code Playgroud)

但是后端不需要支持每个接口函数的功能.所以我有两种可能性,第一种选择是在每次调用之前检查指针是否为NULL.我不太喜欢这样,因为可读性和因为我担心性能影响(但我没有测量它).另一种选择是具有虚函数,对于极少数情况,接口函数不存在.

因此,我需要为每个签名都使用一个虚函数,我想知道是否有可能只有一个用于不同的返回值.并将其转换为给定的签名.


#include <stdio.h>

int nothing(void) {return 0;}

typedef int (*cb_t)(int);

int main(void)
{
    cb_t func;
    int i;

    func = (cb_t) nothing;
    i = func(1);

    printf("%d\n", i);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我用gcc测试了这段代码,它确实有效.但它是否理智?或者它可以破坏堆栈还是会导致其他问题?

编辑:感谢所有答案,经过一番深入阅读后,我现在学到了很多关于调用约定的知识.并且现在可以更好地理解引擎盖下发生的事情.

c pointers

16
推荐指数
1
解决办法
2万
查看次数

如何在WPF中突出显示/勾勒出Visual对象?

如果我有一个包含任意形状或大小的n个Visual对象的Canvas,我将如何以编程方式突出显示/概述Visual对象?

WPF中有内置的东西可以帮助我吗?

wpf

5
推荐指数
2
解决办法
3779
查看次数

如何从批处理文件启动多个Internet Explorer窗口/选项卡?

我想要一个批处理文件来启动两个单独的程序然后关闭命令行窗口.实际上,为了澄清,我正在使用两个不同的URL启动Internet Explorer.

到目前为止,我有这样的事情:

start "~\iexplore.exe" "url1"
start "~\iexplore.exe" "url2"
Run Code Online (Sandbox Code Playgroud)

我得到的是Internet Explorer的一个实例,只加载了第二个URL.似乎第二个正在取代第二个.我似乎记得一种语法,我将加载一个新的命令行窗口并传递命令以在加载时执行,但无法找到引用.

作为问题的第二部分:什么是一个很好的参考URL,以保持您编写快速批处理文件所需的时间?

编辑:我已经标记了答案,因为它确实有效.我现在打开两个窗口,每个URL一个.(谢谢!)有趣的是,如果没有使用原始语法的/ d方法,我会根据是否打开预先存在的Internet Explorer实例得到不同的结果.

  • 如果我这样做,我会为我的两个网址添加两个新标签(甜蜜!)
  • 如果不是,我只获得传入的第二个URL的最终选项卡.

internet-explorer batch-file

21
推荐指数
3
解决办法
23万
查看次数

我应该使用默认(Foo),Foo.Empty还是null?

所以C#现在允许你用来default(Foo)获得一个认可的"未填充"/空类的实例 - 我不确定它是否完全相同new Foo().许多库类还实现了一个Foo.Empty属性,该属性返回一个类似的实例.当然,任何参考类型都可以指向null.那真的,有什么区别?什么时候是对还是错?什么更一致,或表现更好?在检查对象在概念上是否"未准备好黄金时间"时,我应该使用哪些测试?不是每个人都有Foo.IsNullOrEmpty().

c# constructor conventions

3
推荐指数
1
解决办法
272
查看次数

如何使用C#来清理html页面上的输入?

是否有库或可接受的方法来清理html页面的输入?

在这种情况下,我有一个只有姓名,电话号码和电子邮件地址的表单.

代码必须是C#.

例如:

"<script src='bobs.js'>John Doe</script>" 应该成为 "John Doe"

c# html-sanitizing antixsslibrary

36
推荐指数
5
解决办法
3万
查看次数

将错误注入已经过验证的表单中?

form.Form验证用户输入值后,我将它们传递给单独的(外部)进程以进行进一步处理.此外部进程可能会在值中发现更多错误.

有没有办法将这些错误注入已经验证的表单中,以便通过常用的表单错误显示方法显示它们(或者有更好的替代方法)?

一个建议是在表单验证中包含外部处理,这不是理想的,因为外部流程不仅仅需要验证.

django django-forms

93
推荐指数
4
解决办法
3万
查看次数

ASP.NET中的AutoCompleteExtender附加信息

如何将其他信息传递给返回项集合的服务方法?我将尝试解释我的意思,我在表单上有2个文本框,我需要根据数据库中的特定帐户ID填写名称.所以,我需要将一个整数传递给getNamesForDropDown方法.我无法弄清楚要做什么,所以我做错了,并使用CompletionSetCount实际传递了我需要的信息:

[System.Web.Services.WebMethod]
[System.Web.Script.Services.ScriptMethod]
public string[] getNamesForDropDown(string prefixText, int count) 
{
   String sql = "Select fldName From idAccountReps Where idAccount = " + count.ToString();
   //... rest of the method removed, this should be enough code to understand
   //... the evil wrongness I did. 
}
Run Code Online (Sandbox Code Playgroud)

在我的正面aspx文件中,我根据用户当前在该页面上查看的帐户ID设置了CompletionSetCount.

<ajaxtk:AutoCompleteExtender 
    runat="server" 
    ID="AC1" 
    TargetControlID="txtAccName"
    ServiceMethod="getNamesForDropDown"
    ServicePath="AccountInfo.asmx"
    MinimumPrefixLength="1" 
    EnableCaching="true"
    CompletionSetCount='<%# Eval("idAccount") %>'
/>
Run Code Online (Sandbox Code Playgroud)

所以,这绝对是一种错误的方式......什么是正确的方法?

asp.net autocompleteextender ajaxcontroltoolkit

2
推荐指数
1
解决办法
5457
查看次数

.NET中的glob模式匹配

.NET中是否有内置机制来匹配正则表达式以外的模式?我想使用UNIX样式(glob)通配符匹配(*=任何数字的任何字符).

我想将它用于面向最终用户的控件.我担心允许所有RegEx功能会非常混乱.

.net c# glob

46
推荐指数
7
解决办法
2万
查看次数

VBA中是否有办法了解未使用的变量?

标准VBA编辑器中是否有工具,方法或设置来警告已经Dim'med,但没有被使用的变量?

variables excel vba excel-vba vbe

14
推荐指数
2
解决办法
6827
查看次数

如何在技术规范中记录WCF Web服务?

除了在技术规范中粘贴WDSL之外,在开始编码之前,有哪些建议的方法来记录WCF Web服务?

c# wcf web-services

4
推荐指数
1
解决办法
1万
查看次数