标签: function-call

javascript"this"再次指向Window对象

我问了一个关于Javascript的问题,这指向Window对象关于"this"指向Window对象.

这是源代码

var archive = function(){} 

archive.prototype.action = { 
    test: function(callback){ 
        callback(); 
    }, 
    test2: function(){ 
        console.log(this); 
    } 
} 

var oArchive = new archive(); 
oArchive.action.test(oArchive.action.test2); 
Run Code Online (Sandbox Code Playgroud)

Tim Down写道"但是该函数随后使用callback()调用,这意味着它不被称为方法,因此这是全局对象".

通过实际名称调用函数和源代码中显示的callback()之间有什么区别?

当test2中的console.log(this)指向Window时,它是如何指向Window的.

javascript reference function-call

6
推荐指数
1
解决办法
1720
查看次数

如何使用Antlr实现函数调用,以便甚至可以在定义之前调用它?

构建AST后,实现树步行器的最佳方法是什么,以便可以按任何顺序定义和调用函数?

例如,这在PHP中有效:

<?php
f(); // function called before it’s defined
function f() {
  print 3;
}
?>
Run Code Online (Sandbox Code Playgroud)

我猜不知道必须有第二遍,或树变换,但我找不到任何关于这个主题的有趣内容.这个问题可能不是特定于Antlr的问题,但是如果你能指出一个Antlr如何做到这一点的例子,那就更好了!

antlr abstract-syntax-tree function-call

6
推荐指数
1
解决办法
5204
查看次数

C++:调用函数的代码注入

首先,我不想注入一个DLL.我想使用WriteProcessMemory()注入代码(如果这是可能的话).我已经使用过ReadProcessMemory()所以我认为写作并不是什么大问题.
好吧,让我们说TargetProgram.exe + D78C612有一个功能,
让我们说它可以像这样调用:

push eax
push [esp+08]
push edx
push 00
push TargetProgram.exe+AF76235
push 04
call TargetProgram.exe+D78C612
Run Code Online (Sandbox Code Playgroud)

我将如何使用WriteProcessMemory()完成此操作?
我的意思是我在哪里可以找到一个部分,我可以在其中注入我的代码而不会覆盖重要的东西.最重要的是,我该如何调用该函数?
只需在活动例程中跳转到我的代码,然后跳回并删除它?但是我怎么能找到这个例程呢?
这么多问题,我不知道如何开始...我希望你能帮助我.:)
如果你有时间我真的想看一个函数调用注入的示例代码.

c++ code-injection function-call

6
推荐指数
1
解决办法
4758
查看次数

从shell调用python并捕获输出

我已经在shell中编写了一个程序.在这个shell脚本中,我正在调用一个python脚本.这工作正常.我希望我的python脚本将输出返回到shell脚本.可能吗?(我没有在谷歌上得到任何这样的方式).如果有可能,你能告诉我该怎么做吗?

test.sh

#!/bin/bash
python call_py.py
Run Code Online (Sandbox Code Playgroud)

和python脚本(call_py.py)

#!/usr/bin/python
if some_check:
    "return working"
else:
    "return not working"
Run Code Online (Sandbox Code Playgroud)

如何从python返回并捕获shell?

shell function-call python-2.7

6
推荐指数
2
解决办法
6190
查看次数

使用三元运算符选择C函数

我有两个C函数,f1f2采用相同的参数.根据条件,我需要使用相同的参数调用一个或另一个:

if (condition) {
    result = f1(a, b, c);
} else {
    result = f2(a, b, c);
}
Run Code Online (Sandbox Code Playgroud)

我理解可以使用以下语法:

result = condition ? f1(a, b, c) : f2(a, b, c)
Run Code Online (Sandbox Code Playgroud)

是否有可能需要一次写入参数的DRY语法?

c syntax function call function-call

6
推荐指数
1
解决办法
2698
查看次数

没有原型的函数使用不兼容的类型调用

我读了Standard N1570部分,6.5.2.2 Function calls并对包含原型的函数类型的特殊含义感到困惑。精确地6.5.2.2(p6)

如果使用不包含原型的类型定义函数,并且升级后的参数类型与升级后的参数类型不兼容,则除以下情况外,行为是不确定的:

—一种提升的类型是有符号整数类型,另一种提升的类型是相应的无符号整数类型,并且值在两种类型中都可以表示;

—两种类型都是指向字符类型或void的合格或不合格版本的指针。

6.5.2.2(p7) 提供了使用原型调用函数的规则:

如果表示被调用函数的表达式的类型确实包含原型,则将参数隐式转换为相应参数的类型,就像通过赋值一样,将每个参数的类型视为其声明的非限定版本。类型。

考虑以下示例:

struct test_arg{
    int a;
};

void test_no_prototype(const struct test_arg a){ }

void test_with_prototype(const struct test_arg a);

void test_with_prototype(const struct test_arg a){ }

int main(){
    struct test_arg test = {.a = 42};
    test_no_prototype(test);   //1 UB?
    test_with_prototype(test); //2 Fine?
}
Run Code Online (Sandbox Code Playgroud)

我认为1是UB,因为test_no_prototype它不包括原型并且test具有的非限定版本struct test_arg,但是参数由于不同的限定const struct test_arg而具有不兼容的类型struct test_arg

我认为2很好,因为test_with_prototype包括原型和从6.5.16.1(p1)允许将同一结构的非限定版本的合格结构类型的变量赋值的简单赋值约束。

这似乎很奇怪,现在我无法想象为什么我们对带有原型和没有原型的函数进行不同处理的任何原因。可能是我对规则的理解不正确...如果可以,您能解释一下这是什么意思吗?

c function function-call language-lawyer

6
推荐指数
1
解决办法
57
查看次数

为什么我的程序从右到左评估参数?

我正在学习C,因此尝试了以下代码,并获得了7,6而不是的输出6,7。为什么?

#include <stdio.h>
int f1(int);
void main()
{
    int b = 5;
    printf("%d,%d", f1(b), f1(b));
}
int f1(int b)
{
    static int n = 5;
    n++;
    return n;
}
Run Code Online (Sandbox Code Playgroud)

c function-call order-of-execution

6
推荐指数
1
解决办法
159
查看次数

C 中的默认参数和参数提升

我正在研究默认参数提升,并一度陷入困境。在 C 2011 (ISO/IEC 9899:2011) 中,相关部分似乎是:

§6.5.2.2 函数调用

¶6 如果表示被调用函数的表达式具有不包含原型的类型,则对每个参数执行整数提升,并且具有 float 类型的参数提升为 double。这些被称为默认参数提升。如果参数数量不等于参数数量,则行为未定义。如果函数定义为包含原型的类型,并且原型以省略号 (, ...) 结尾,或者提升后的参数类型与参数类型不兼容,则行为未定义。如果函数定义的类型不包含原型,并且提升后的参数类型与提升后的参数类型不兼容,则行为未定义,

——一个提升类型是有符号整数类型,另一个提升类型是对应的无符号整数类型,值在两种类型中都可以表示;

— 两种类型都是指向字符类型或 void 的限定或非限定版本的指针。

在段落的最后三行中,它讨论了定义时不包含原型的函数类型。

它表示如果提升后的参数类型与提升后的参数类型不兼容,则行为是 undefined

现在我有一个非常愚蠢的疑问,如果函数声明和函数定义都没有包含本段中提到的原型,那么他们在段落的最后三行中谈论的是哪些参数。这里“提升后的参数”是什么意思,因为我只研究了参数提升。什么是“参数提升”?

您还可以举例说明最后提到的例外情况。如果有人可以用一个适当的例子来解释这一点,那将是非常可观的。

c standards promotions function-call undefined-behavior

6
推荐指数
1
解决办法
191
查看次数

sizeof 是函数还是运算符?

为什么说sizeof(variable)是运算符,而不是函数?

它看起来像一个函数调用,当我考虑运算符的含义时,在我看来像+or-*等等

c operators sizeof function-call

6
推荐指数
2
解决办法
288
查看次数

函数调用开销 - 为什么内置 Python 内置函数看起来比我的内置函数更快?

我对开销很感兴趣,所以我编写了一个最小的 C 扩展,导出两个函数nop,并且starnop或多或少不执行任何操作。他们只是传递他们的输入(两个相关的函数位于顶部,其余的只是乏味的样板代码):

\n\n

amanmodule.c:

\n\n
#include <Python.h>\n\nstatic PyObject* aman_nop(PyObject *self, PyObject *args)\n{\n  PyObject *obj;\n\n  if (!PyArg_UnpackTuple(args, "arg", 1, 1, &obj))\n    return NULL;\n  Py_INCREF(obj);\n  return obj;\n}\n\nstatic PyObject* aman_starnop(PyObject *self, PyObject *args)\n{\n  Py_INCREF(args);\n  return args;\n}\n\nstatic PyMethodDef AmanMethods[] = {\n  {"nop",  (PyCFunction)aman_nop, METH_VARARGS,\n   PyDoc_STR("nop(arg) -> arg\\n\\nReturn arg unchanged.")},\n  {"starnop", (PyCFunction)aman_starnop, METH_VARARGS,\n   PyDoc_STR("starnop(*args) -> args\\n\\nReturn tuple of args unchanged")},\n  {NULL, NULL}\n};\n\nstatic struct PyModuleDef amanmodule = {\n    PyModuleDef_HEAD_INIT,\n    "aman",\n    "aman - a module about nothing.\\n\\n"\n    "Provides functions \'nop\' and \'starnop\' …
Run Code Online (Sandbox Code Playgroud)

c python overhead function-call

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