函数签名中typedef void FOO与#define FOO void的含义

天哪

在查看一些将C和C ++高度混合的源代码时,我遇到了以下内容(为保护公司的工作而进行了一些修改,含义保持不变):

/*
 * Typedefs of void are synonymous with the void keyword in C,
 * but not in C++. In order to support the use of MY_VOID
 * in place of the void keyword to specify that a function takes no
 * arguments, it must be a macro rather than a typedef.
 */
#define MY_VOID void

typedef void MY_VOID#define MY_VOID void在这种特定情况下有什么区别


我不认为这是该问题的重复部分,因为它专门询问有关函数签名的含义,而不是更笼统的“有什么区别”。

纳瓦兹

C ++中的一个简单测试程序演示了区别:

typedef void VOID;

void f(VOID) {}

int main()
{
    f();
}

在编译时(作为C ++),它给出以下错误

prog.cpp:5:8: error: '<anonymous>' has incomplete type
 void f(VOID) {}
        ^
prog.cpp:5:12: error: invalid use of 'VOID {aka void}'
 void f(VOID) {}
            ^
prog.cpp: In function 'int main()':
prog.cpp:9:7: error: too few arguments to function 'void f(<type error>)'
     f();
       ^
prog.cpp:5:6: note: declared here
 void f(VOID) {}
      ^

解释了注释在代码中的含义。特别地,似乎的typedefVOID尝试是一种类型的不同void当它被用作参数类型

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

foo(void)与foo(void *)

来自分类Dev

这个声明是什么typedef void foo(); 意思是?

来自分类Dev

void foo(const int a)中的const有什么作用?

来自分类Dev

声明`int foo(void);后``int foo(){}`与`int foo(void){}`的定义

来自分类Dev

(void(*)(void *))的含义

来自分类Dev

如何禁止从“ void *”到“ foo *”转换的警告(通过-fpermissive从错误中减少)

来自分类Dev

C:未指定数量的参数-void foo()

来自分类Dev

如何将void *转换为foo *以符合C ++?

来自分类Dev

foo({1,2})如何用于“ void foo(pair <int,int>)”

来自分类Dev

是否有一个GCC选项将foo()视为foo(void)?

来自分类Dev

JS-@在导入'@ foo / bar'中的含义

来自分类Dev

C ++中void * volatile *的含义是什么

来自分类Dev

当T == void时如何最好地解决“ void foo(const T&t = T())”

来自分类Dev

foo,bar,baz等的含义

来自分类Dev

从Foo **到void **的无效转换-为什么允许隐式类型转换为void *但不允许为void **?

来自分类Dev

从Foo **到void **的无效转换-为什么允许隐式类型转换为void *但不允许为void **?

来自分类Dev

(void *)-1的含义

来自分类Dev

(void *)-1的含义

来自分类Dev

dart中const ['foo','bar']`中const的含义

来自分类Dev

含义:void * _Nullable(* _Nonnull)(void * _Nullable)

来自分类Dev

函数指针 IAR ( typedef void )

来自分类Dev

从void函数返回void函数

来自分类Dev

防止foo =“ *”中的glob扩展;回声$ foo

来自分类Dev

语法的含义是什么:<element #foo />

来自分类Dev

Windows中的$(shell [foo])

来自分类Dev

null == foo与foo == null

来自分类Dev

Foo <?,?,?>不是Foo <?,?,?>

来自分类Dev

null == foo与foo == null

来自分类Dev

这个 foo 函数是如何工作的?

Related 相关文章

  1. 1

    foo(void)与foo(void *)

  2. 2

    这个声明是什么typedef void foo(); 意思是?

  3. 3

    void foo(const int a)中的const有什么作用?

  4. 4

    声明`int foo(void);后``int foo(){}`与`int foo(void){}`的定义

  5. 5

    (void(*)(void *))的含义

  6. 6

    如何禁止从“ void *”到“ foo *”转换的警告(通过-fpermissive从错误中减少)

  7. 7

    C:未指定数量的参数-void foo()

  8. 8

    如何将void *转换为foo *以符合C ++?

  9. 9

    foo({1,2})如何用于“ void foo(pair <int,int>)”

  10. 10

    是否有一个GCC选项将foo()视为foo(void)?

  11. 11

    JS-@在导入'@ foo / bar'中的含义

  12. 12

    C ++中void * volatile *的含义是什么

  13. 13

    当T == void时如何最好地解决“ void foo(const T&t = T())”

  14. 14

    foo,bar,baz等的含义

  15. 15

    从Foo **到void **的无效转换-为什么允许隐式类型转换为void *但不允许为void **?

  16. 16

    从Foo **到void **的无效转换-为什么允许隐式类型转换为void *但不允许为void **?

  17. 17

    (void *)-1的含义

  18. 18

    (void *)-1的含义

  19. 19

    dart中const ['foo','bar']`中const的含义

  20. 20

    含义:void * _Nullable(* _Nonnull)(void * _Nullable)

  21. 21

    函数指针 IAR ( typedef void )

  22. 22

    从void函数返回void函数

  23. 23

    防止foo =“ *”中的glob扩展;回声$ foo

  24. 24

    语法的含义是什么:<element #foo />

  25. 25

    Windows中的$(shell [foo])

  26. 26

    null == foo与foo == null

  27. 27

    Foo <?,?,?>不是Foo <?,?,?>

  28. 28

    null == foo与foo == null

  29. 29

    这个 foo 函数是如何工作的?

热门标签

归档