相关疑难解决方法(0)

如何避免在信号处理程序中使用printf?

由于printf不是可重入的,因此在信号处理程序中使用它并不安全.但我已经看到很多使用printf这种方式的示例代码.

所以我的问题是:我们何时需要避免printf在信号处理程序中使用,是否有推荐的替代品?

c linux signals

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

如何声明__stdcall函数指针

我试过这个

typedef void (* __stdcall MessageHandler)(const Task*);
Run Code Online (Sandbox Code Playgroud)

这编译但给了我这个警告(VS2003):

警告C4229:使用的时间错误:忽略数据上的修饰符

我想用stdcall调用约定声明一个指向函数的指针?我究竟做错了什么?

c++ function-pointers calling-convention visual-c++

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

我可以创建功能参考吗?

可能重复:
函数引用

我在一本书中找到了这个代码,

typedef int (&foo)(int,int);

这是什么意思 ?这是对函数的引用吗?如果是,为什么用它?它与指向这样的函数的指针有什么不同.

typedef int (*foo)(int,int);

这只是C++中不是C的增强吗?

编辑:

#include <iostream>
#include <typeinfo>
using namespace std;
int f (int , int ) {return 0;}
int main() {
    int (&foo)(int,int) = f;
    int (*fp)(int,int) = f;
    std::cout<<typeid(foo).name()<<std::endl<<typeid(fp).name();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我打印的类型foofp它给了这样的事情:

FiiiE
PFiiiE

什么是E最后的.为什么fooF同时fpPF

c++ function-pointers reference

9
推荐指数
0
解决办法
122
查看次数

C++语法/语义问题:引用Function和typedef关键字

typedef int (&rifii) (int, int)用什么?

这个"声明"之前的typedef是什么?我想把它想象成这样

typedef (int (&rifii) (int, int)) [new name]
Run Code Online (Sandbox Code Playgroud)

但如果你这样做的话,[新名字]并不存在

typedef int INTEGER;
Run Code Online (Sandbox Code Playgroud)

类似的问题,以下语法:

typedef void (*PF) ();

PF edit_ops[ ] = { &cut, &paste, &copy, &search };
PF file_ops[ ] = { &open, &append, & close, &write };

PF* button2 = edit_ops;
PF* button3 = file_ops;

button2[2]( );
Run Code Online (Sandbox Code Playgroud)

什么是typedef允许?它是否正在制作,因此您无需键入:

void (*PF) ();
(void (*PF) ()) edit_ops[ ] = { &cut, &paste, &copy, &search };
(void (*PF) ()) file_ops[ ] = { &open, &append, …
Run Code Online (Sandbox Code Playgroud)

c++ typedef function-pointers reference

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

定义函数类型和函数指针类型有什么区别?

据我所知,我可以定义一个函数类型:

typedef void (fn)(void);
Run Code Online (Sandbox Code Playgroud)

我还可以定义一个函数指针类型:

typedef void (*pfn)(void);
Run Code Online (Sandbox Code Playgroud)

有2个功能.第一个函数的参数类型是一个函数,另一个是函数指针:

void a(fn fn1)
{
    fn1();
}

void b(pfn fn1)
{
    fn1();
}  
Run Code Online (Sandbox Code Playgroud)

我实现了一个函数回调:

void callback(void)
{
    printf("hello\n");
}
Run Code Online (Sandbox Code Playgroud)

并将其作为参数传递给a和b:

int main(void) {
    a(callback);
    b(callback);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

a和b都运行良好,并打印"hello".

所以我想知道定义函数类型和函数指针类型有什么区别?或者实际上,它们是一样的?

c

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

这两个参数在typedef中意味着什么?

我有一段代码,我不明白那一个typedef:

typedef void (inst_cb_t) (const char*, size_t);
Run Code Online (Sandbox Code Playgroud)

不,实际上意味着你可以使用inst_cb_tvoid呢?但是第二个括号中的内容呢?

c typedef function

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

如何阅读这个原型?

帮助我理解以下原型.最后一次(int)做什么?

void ( *signal(int sig, void (*handler)(int)) ) (int);
Run Code Online (Sandbox Code Playgroud)

c prototype function-pointers declaration

3
推荐指数
2
解决办法
3812
查看次数

涉及函数指针和状态机的代码说明

有人可以逐行解释这一点(可能是逐个字符,哈哈)?

typedef int (*funcptr)();     /* generic function pointer */
typedef funcptr (*ptrfuncptr)();  /* ptr to fcn returning g.f.p. */

funcptr start(), stop();
funcptr state1(), state2(), state3();

void statemachine()
{
    ptrfuncptr state = start;

    while(state != stop)
        state = (ptrfuncptr)(*state)();
}

funcptr start()
{
    return (funcptr)state1;
}  
Run Code Online (Sandbox Code Playgroud)

例如,我想知道为什么在第1行的末尾有()."只是你如何声明指向函数的指针"这样的答案会令人满意,但是当你声明一个这种类型的变量时,为什么只使用"funcptr"而没有()?

第4行和第5行.为什么你在这里有?那些不是函数,它们是函数的指针,对吧?

第9行.为什么"状态"没有()?仍然是指向函数的指针,就像第5行和第6行的指针一样.

第9行.没有()的"开始"是什么?

第12行.什么?!(我知道什么是类型转换.至少我认为我做...)

第17行.为什么"state1"需要进行类型转换?这是它已经被铸造的类型.或者是因为它缺少()?

这对我理解这些概念真的很有帮助.

PS.这是一个微控制器,我将用于我正在设计的电子虚拟负载.认为这是一个了解更多关于C的好机会.代码来自http://c-faq.com/decl/recurfuncp.html

c function-pointers state-machine

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

将typedef声明为函数

如果没有为第3行中的typedef命名,以下代码如何工作?编译器如何将pf视为新数据类型?

#include <stdio.h>

int fun(int, int);
typedef int (*pf) (int, int);
int proc(pf, int, int);

int main(){
    printf("%d\n", proc(fun, 6, 6));
    return 0;
}

int fun(int a, int b){
    return (a==b);
}

int proc(pf p, int a, int b){
    return ((*p)(a, b));
}
Run Code Online (Sandbox Code Playgroud)

c

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

typedef void(*MyCallback):它是什么以及如何使用它?

我是一名Java开发人员.

我正在尝试理解一个C/C++项目,我发现它:

*.h 档案:

typedef void (*MyCallback) (MyHandle handle, void* context, MyResult result, ... );
int MyMethod(MyHandle handle, void* context, MyCallback cb);
Run Code Online (Sandbox Code Playgroud)

*.cpp 文件:

int MyMethod(MyHandle handle, void* context, MyCallback cb){

   //...

}
Run Code Online (Sandbox Code Playgroud)

而我真的没有得到它的意义......

任何人都可以向我解释这是什么意思typedef void?我只使用简单的typedef来处理简单的结构......但是在这个中我可以看到一个可怕的指针(对于Java开发人员而言,抱歉指针恐惧症......).

而且,为什么我们这样做typedef ?? 我没有MyCallBackMyMethod功能上看到任何指针.

我需要了解这段代码的含义.

非常感谢!

c++ pointers typedef void

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