小编Fra*_*y I的帖子

宏正确扩展,但给了我"预期表达式"错误

我已经轻而易举地减少了我的问题:

#define STR_BEG "
#define STR_END "

int main()
{
    char * s = STR_BEG abc STR_END;

    printf("%s\n", s);
}
Run Code Online (Sandbox Code Playgroud)

编译时,我收到以下错误:

static2.c:12:16: error: expected expression
    char * s = STR_BEG abc STR_END;
               ^
static2.c:7:17: note: expanded from macro 'STR_BEG'
#define STR_BEG "
Run Code Online (Sandbox Code Playgroud)

现在,如果我运行预处理器gcc -E myfile.c,我得到:

int main()
{
    char * s = " abc ";


    printf("%s\n", s);
}
Run Code Online (Sandbox Code Playgroud)

这正是我想要的,以及完全合法的结果代码.那是什么交易?

c macros c-preprocessor

8
推荐指数
1
解决办法
8634
查看次数

将自定义URL协议映射到HTTP(使用NSURLProtocol?)

我有一个使用WebKit WebView的应用程序,我想将使用自定义URL协议加载到此WebView中的URL映射到不同的HTTP URL.例如,假设我正在加载:

定制://路径/到/资源

我想在内部实际加载:

http://something-else.com/path/to/resource

换句话说,自定义协议几乎用作速记.但我不能使用-webView:resource:willSendRequest:redirectResponse:fromDataSource :,因为我希望WebKit实际上相信这是有问题的URL,而不是简单地从一个重定向到另一个.

到目前为止,我一直在尝试使用自定义NSURLProtocol子类.然而,这比我最初想的要复杂,因为至少根据我的理解,我将不得不在NSURLProtocol子类'startLoading方法中进行实际加载.我想要一种方法将工作交给现有的HTTP协议加载器,但我找不到一种简单的方法来做到这一点.

有没有人对此提出建议,或者可能是另一种解决此问题的方法?

谢谢!

cocoa webkit nsurlprotocol

7
推荐指数
1
解决办法
3098
查看次数

WebSocket关闭代码1002

我编写了一个使用Web套接字在服务器和客户端之间进行通信的应用程序.我想处理客户端过时(太旧)的情况,因此会误解/不适当地处理消息.我的想法是,如果客户端太旧,我会关闭连接并发送相应的状态代码.我阅读规范,似乎1002 可能是适当的代码:

  1002 indicates that an endpoint is terminating the connection due
  to a protocol error.
Run Code Online (Sandbox Code Playgroud)

但是,我实际上并不知道这意味着什么(如果它实际上是指Web套接字协议,因此是较低级别的错误).1002是否适用于此,或者我应该在4000-4999区域中制作自定义(应用程序)关闭代码,如下所示:https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent

websocket node.js

7
推荐指数
1
解决办法
9786
查看次数

为什么 Time.fixedTime 和 family 是 float 而不是 double?

只是想知道我是否遗漏了什么。我来自 ObjC 领域,其中 NSTimeInterval 是一个双精度值,它给出了“10,000 年范围内的亚毫秒精度”。将此与 Unity 进行比较,因为它使用浮动时间,一天后(甚至可能更早)开始崩溃。Math.Approximately(1 day, a day + 1 frame) 例如返回 true(而 1 小时 vs 1 小时 + 1 帧正确返回 false)。当我整夜打开游戏并重新开始时,我实际上经历了这种情况,注意到与时间相关的事物的奇怪行为。

unity-game-engine

5
推荐指数
1
解决办法
2656
查看次数

Docker镜像是否可以保存内存状态?

对码头工人来说很新,为这个微不足道的问题道歉.我目前正在使用虚拟机并创建实时快照(当然可以保存内存状态等),这样当我在那个确切的时刻恢复它时.Docker快照的工作方式是否类似?如果我用正在运行的应用程序对其进行快照,它是否会恢复到同一状态?

docker

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

用 postMessage 检查 window.parent 的来源有什么意义吗?

我有一个脚本,旨在由创建 iframe(在我们的源上)的第三方站点包含。像这样的东西:

// this script exists on the *host site*
const iframe = document.createElement("iframe");
iframe.src = "https://us.com/iframe";
parent.appendChild(iframe);
Run Code Online (Sandbox Code Playgroud)

该脚本公开了一个 API,该 API 通过 与 iframe 进行内部通信postMessage,例如:

// This script exists on the *host site*
function getSomeProperty()
{
    return new Promise(function (resolve, reject)
    {
        theIFrame.postMessage("getSomeProperty", "us.com")
        window.addEventListener("message", function (event)
        {
            // ... get the response, making sure its from us.com, etc.
            // This is just pseudo code, we don't create a new listener
            // on every call in our real …
Run Code Online (Sandbox Code Playgroud)

javascript iframe postmessage cross-domain same-origin-policy

5
推荐指数
1
解决办法
1346
查看次数

我可以“返回”Num a 就像文字似乎能够“返回”Num a 一样吗?

在 ghci 中,如果我这样做

Prelude> :t 5
Prelude> 5 :: Num a => a
Run Code Online (Sandbox Code Playgroud)

但如果我分配 5,我会得到Integer以下类型:

Prelude> let f = 5
Prelude> t: f
Prelude> f :: Integer
Run Code Online (Sandbox Code Playgroud)

根据我的理解,5 是允许的事实Num a => a是可以愉快地出现在任何数学表达式中(例如5 + 5.0)。我想我很好奇这是否是 Haskell 的魔法,或者我是否可以创建一个f具有相同行为方式的变量,以便我可以执行f + 5.0. 我尝试了以下方法但没有成功:

let f = 10 :: Num a => a
Run Code Online (Sandbox Code Playgroud)

f + 5.0仍然给我一个错误。

haskell

5
推荐指数
0
解决办法
86
查看次数

如何在 Unity 中手动关闭 TouchScreenKeyboard

标题几乎总结了它,我知道我可以用 Open() 提出它,但我想要像 .Close() 这样的东西在某些情况下自己手动关闭它。

keyboard unity-game-engine ios

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

实现ICollection时,无法同时实现GetEnumerator返回IEnumerator和IEnumerator <T>

我正在编写一个实现的简单集合类ICollection<T>.一切都基本有效,除非我添加一个IEnumerator<T> GetEnumerator()方法,它抱怨我没有IEnumerator GetEnumerator()方法.反之亦然.我不允许两者都有,因为它们只有返回类型不同,所以我真的很困惑编译器想要的东西.

以下是错误,正如它们给我的错误:

错误CS0738:MyClass<T>' does not implement interface memberSystem.Collections.Generic.IEnumerable.GetEnumerator()'和最佳实现候选者MyClass<T>.GetEnumerator()' return typeSystem.Collections.IEnumerator'不匹配接口成员返回类型`System.Collections.Generic.IEnumerator'

或者,或者我可以:

错误CS0738:MyClass<T>' does not implement interface memberSystem.Collections.IEnumerable.GetEnumerator()'和最佳实现候选者MyClass<T>.GetEnumerator()' return typeSystem.Collections.Generic.IEnumerator'不匹配接口成员返回类型`System.Collections.IEnumerator'

.net c# generics

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

在阻塞模式下 send() 之后我可以立即释放我的数据吗?

文档说发送:

当消息无法放入套接字的发送缓冲区时,send() 通常会阻塞,除非套接字已置于非阻塞 I/O 模式。在非阻塞模式下,在这种情况下它将返回 EAGAIN。select(2) 调用可用于确定何时可以发送更多数据。

我处于阻塞模式,正在执行以下操作:

buf = malloc(size);

send (socket, buf, size);

free(buf)
Run Code Online (Sandbox Code Playgroud)

假设但非常大,大于缓冲区一次可以容纳的大小(因此它需要以两个块的形式进入缓冲区)。无论如何,在发送后我所处的阻塞模式下,数据被完全复制或处理并因此可删除,我可以放心吗?

c sockets

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

返回自己的C#委托

基本上我想要一个可以回归的代表.我有一个非常简单的减少我理论上想要的东西:

int i =0;
var x = () => 
{
    if (i > 10)
        return null;

    ++i;
    Debug.Log("keep going");
    return x;
};

var y = x;

while ((y = y()) != null) ;
Run Code Online (Sandbox Code Playgroud)

当然,预期的输出是在控制台中看到"继续"10次.我只是想知道这种语言是否可行(我知道我可以通过for循环实现相同的目标).例如,使用与上面非常相似的代码在JavaScript中进行操作是微不足道的,但我不能让编译器在C#中配合.我认为失败的原因是无法正确描述"x"的类型(Func<Func<Func...,你需要类似前向声明的东西.

c# lambda delegates

0
推荐指数
1
解决办法
636
查看次数