C++:这是使用整数变量作为函数调用指针的正确方法吗?

标签 c++

我是 C++ 新手。

上下文:我发现这个第三方代码片段似乎可以工作,但根据我(非常有限)的 C++ 知识,我怀疑它会导致问题.片段如下:

int aVariable;

int anInt = 1;
int anotherInt = 2;
int lastInt = 3;

aVariable = CHAIN(anInt, anotherInt, lastInt);

其中 CHAIN 定义如下(这是库的一部分):

int CHAIN(){ Map(&CHAIN, MakeProcInstance(&_CHAIN), MAP_IPTR_VPN); }
int _CHAIN(int i, int np, int p){ return ASMAlloc(np, p, &chainproc); }
int keyalloc[16384], kpos, alloc_locked, tmp[4];

int ASMAlloc(int np, int p, alias proc)
{
    int v, x;   
//  if(alloc_locked) return 0 & printf("WARNING: you can declare compound key statements (SEQ, CHAIN, EXEC, TEMPO, AXIS) only inside main() call, and not during an event.\xa");
    v = elements(&keyalloc) - kpos - 4;
    if(v < np | !np) return 0;                      // not enough allocation space or no parameters
    Map(&v, p); Dim(&v, np);                        // v = params array
    keyalloc[kpos] = np + 4;                        // size
    keyalloc[kpos+1] = &proc;                       // function
    keyalloc[kpos+2] = kpos + 2 + np;               // parameters index
    while(x < np)
    {
        keyalloc[kpos+3+x] = v[x];
        x = x+1;
    }
    keyalloc[kpos+3+np] = kpos + 3 | JUMP; 
    x = ASMFind(kpos);
    if(x == kpos) kpos = kpos + np + 4;
    return x + 1 | PROC;    // skip block size
}

int ASMFind(int x)
{
    int i, j, k; while(i < x)
    {
        k = i + keyalloc[i]; // next
        if(keyalloc[i] == keyalloc[x])  // size
            if(keyalloc[i+1] == keyalloc[x+1]) // proc
            {
                j = x-i;
                i = i+3;
                while(keyalloc[i] == keyalloc[j+i]) i = i+1;    // param
                if((keyalloc[i] & 0xffff0000) == JUMP) return x-j;
            }
        i = k; 
    }
    return x;
}

编辑:

奇怪的是运行

CHAIN(aVariable);

有效地执行

CHAIN(anInt, anotherInt, lastInt);

不知何故。这就是让我相信 aVariable 实际上是一个指针的原因。

问题:

像这样将参数化函数调用存储到整数变量中是否正确? “aVariable”是否仅作为指针工作,或者这是否可能破坏随机内存区域?

最佳答案

您正在调用一个函数(通过混淆接口(interface)),并将结果存储在一个整数中。它可能会或可能不会导致问题,具体取决于您如何使用该值/您期望它的含义。

您的示例包含太多 undefined symbol ,读者无法提供更好的答案。

此外,我认为这是 C 代码,而不是 C++ 代码。

关于C++:这是使用整数变量作为函数调用指针的正确方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51543121/

相关文章:

c++ - 如何从以 shared_ptr 为键的 unordered_set 中获取基于 raw_ptr 的元素

c++ - 如何设置类的 char* 成员?使用 strcat 或其他东西?

参数数量未知的 C++ 函数指针

c++ - 在 fstream c++ 的 while 循环中使用多个定界符

c++ - 在模板中返回一个没有返回类型声明的值,这是错字吗?

c++ - 如何在 lambda 表达式 C++ 中使用 goto 语句

C++ 二进制读写文件

c++ - 奇怪的 C++ 预处理器行为

c++ - 为什么会有函数隐式转换为 boolean 值?

c++ - 为系统托盘和 QAction (QT) 即时使用翻译