首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用C void参数"void foo(void)"或不使用"void foo()"更好吗?

在C语言中,函数的参数列表中使用void表示该函数不接受任何参数。因此,void foo(void)void foo()在功能上是相同的,它们都表示foo函数不接受任何参数。

在C语言中,如果一个函数不接受任何参数,可以使用void参数列表,也可以不使用参数列表。因此,在这个问题中,两种写法都是可以的,但是使用void参数列表更加清晰明了,因为它明确表示该函数不接受任何参数。

总之,void foo(void)void foo()在功能上是相同的,但是使用void参数列表更加清晰明了。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C 语言】数据类型本质 ( void 关键字作用 | 数据类型封装 | 作为 参数 返回值 代表无 | void* 指针赋值与被赋值 | void 类型变量不存在 )

文章目录 一、数据类型封装 二、作为 参数 返回值 代表无 三、void* 指针赋值与被赋值 四、void 类型变量不存在 一、数据类型封装 ---- 实现函数 的 底层函数开发者 , 不想将 底层的数据结构...中 , 拷贝 unsigned n 个字节的数据 , 到 void *destin 指针指向的内存空间中 ; 二、作为 参数 返回值 代表无 ---- void 数据类型 , 作为函数的 参数 ...; 三、void* 指针赋值与被赋值 ---- C 语言中 , 对指针赋值时 , 只有 相同类型的指针 , 才能相互赋值 ; void* 作为 左值 可以 被赋值 任意类型的 指针 ; void* 作为...右值 赋值给其它类型的指针类型变量时 , 必须将 该指针强转为其它类型 ; 最常见的是使用 malloc() 函数申请内存时 , 其返回一个 void * 类型的指针 ; void *malloc(unsigned...从数据概念角度理解 : C 语言程序中的 数据 , 必定属于某种 数据类型 ; void 数据类型代表空 , 就是没有类型的数据 ; 2.

2.5K10
  • TS 进阶 - 类型基础

    在任何时候不要使用 Object 及类似的装箱类型 在不确定某个变量的具体类型,但能确定其不是原始类型时,可以使用 object 推荐还是进行一步区分 Record<string, unknown...rest 参数实际上是一个数组,使用数组类型标注即可: function foo(arg1: string, ...rest: any[]) {} rest 参数也可以用元组类型进行标注: function...: false): number;,重载签名二,bar传值传入 bar 的值为 false 时,返回值类型为 number; function func(foo: number, bar?...: any[]): void; 除了显式标记一个变量参数为 any,在某些情况下一些变量参数会被隐式推导为 any 类型,如: let foo; function func(foo, bar)...any 类型的万能性会导致其被经常滥用,需要注意: 如果是类型兼容报错导致要使用 any,考虑使用类型断言代替 如果是类型太复杂导致不想全部声明要使用 any, 考虑去将这里的类型去断言为需要的最简类型

    1.8K50

    Shader 入门:GLSL ES(简介和基本语法)

    */ —▼— · 变量 变量的命名可以使用英文 a-z A-Z、数字 0-9 和下划线 _,另外需注意以下几点: - 不能以数字开头 - 不能以gl_开头 - 不能直接使用 GLSL 保留的名称...常量不可以更改 —▼— · 函数 定义函数时,如果函数有返回值,就需要指定返回值的类型,如果没有返回值,必须指定为空void; 如果函数有参数,那么也需要指定参数的类型,如果没有参数则可以填或者填入...foo() { ... } // 定义 重载 重载函数允许你传入不同数量不同类型的参数void foo(int value) { ... } void foo(float value) { ...... } void foo(float value1, int value2) { ... } —▼— · 作用域 使用一对花括号{}包裹的区域即为一个作用域: void foo() { int...a + 1; // 第二个 a 属于父域,冲突 int b = a; // 访问当前作用域的 a } int c = b; // Error!

    2.7K30

    C语言编程规范 clean code

    (); // 这里使用了外部接口 Foo ... } 应该改为: a.c 内容 #include "b.h" // Good: 通过包含头文件的方式使用其他.c提供的接口 void...Bar(void) { int i = Foo(); ... } b.h 内容 int Foo(void); b.c内容 int Foo(void) { // Do something...++预处理器展开b.h,将会得到 extern "C" { void Foo(int); void B(void); } 按照 a.h 作者的本意,函数 Foo 是一个 C++ 自由函数...函数参数 建议5.2 设计函数时,优先使用返回值而不是输出参数 使用返回值而不是输出参数,可以提高可读性,并且通常提供相同更好的性能。...建议5.3 使用强类型参数,避免使用void* 尽管不同的语言对待强类型和弱类型有自己的观点,但是一般认为c/c++是强类型语言,既然我们使用的语言是强类型的,就应该保持这样的风格。

    5.5K10

    C语言编程规范 clean code

    (); // 这里使用了外部接口 Foo ... } 应该改为: a.c 内容 #include "b.h" // Good: 通过包含头文件的方式使用其他.c提供的接口 void...Bar(void) { int i = Foo(); ... } b.h 内容 int Foo(void); b.c内容 int Foo(void) { // Do something...++预处理器展开b.h,将会得到 extern "C" { void Foo(int); void B(void); } 按照 a.h 作者的本意,函数 Foo 是一个 C++ 自由函数...函数参数 建议5.2 设计函数时,优先使用返回值而不是输出参数 使用返回值而不是输出参数,可以提高可读性,并且通常提供相同更好的性能。...建议5.3 使用强类型参数,避免使用void* 尽管不同的语言对待强类型和弱类型有自己的观点,但是一般认为c/c++是强类型语言,既然我们使用的语言是强类型的,就应该保持这样的风格。

    4.5K10

    C# 标准性能测试高级用法

    本文告诉大家如何在项目使用性能测试测试自己写的方法 在 C# 标准性能测试 已经告诉大家如何使用 BenchmarkDotNet 测试性能,本文会告诉大家高级的用法。...Foo>(); 这样就可以进行测试,如果需要传入一些参数,那么就需要使用本文的方法 传入参数 如果需要测试的方法需要传入不同的参数,而且在使用不同的参数的性能也是不相同,就需要使用传入参数特性。...,推荐修改字段 [Params(10, 2, 3)] public int Arguments { get; set; } 可以设置属性的值为 10,2,3 在下面代码会组合属性和传入参数...void B3() => Thread.Sleep(10); [Benchmark] public void C1() => Thread.Sleep(10); //...在一个Add使用的 DisjunctionFilter 可以使用关系多个条件。 上面的函数使用的满足名字带有 A 1 而且名字的长度小于 3 才可以执行。

    1.2K10

    SWIG 官方文档第三部分 - 机翻中文人肉修正

    例如,如果你有一个这样的函数: C++void foo(int, char *); 你不能使用类型映射来交换参数,允许你像这样调用函数: Pythonfoo("hello", 3) # 反转参数 如果要更改函数的调用约定...通常指定 numinputs,因此默认值为 1,即从目标语言到 C/C++ 调用时使用参数数量是一对一的映射。...但是,使用参数映射,可以将函数转换为自然的东西。...(int i, double d); 而不是这些包装方法: C++void hello(int i);void hello(); 如果使用了compactdefaultargs,则在特性中指定指定默认参数之间的区别不适用...兼容性说明:当使用默认参数包装方法的方法发生变化时,SWIG-1.3.23 中引入了使用使用默认参数指定的功能的不同行为。

    3.6K30

    SWIG 官方文档第四部分 - 机翻中文人肉修正

    免责声明:这需要目标语言模块中的特殊支持,目前不能保证与所有 SWIG 模块一起使用。它还开始普遍地说明支持可变参数的一些基本的问题。....); ... } 考虑到有可能让自己陷入困境,与创建可变参数 C++ 成员函数的完全通用包装器相比,重新考虑您的设计使用辅助函数提供替代接口可能容易。...例如,如果您有两个这样的函数: C++ void foo(int); void foo(char *c); 你可以直接在 Lua 中使用它们: Lua > foo(3) -- foo(int) >...然而,对于使用输入/输出参数数组的复杂的函数,您将需要使用 ,它包含这些情况下的类型映射。...一种方法是重命名参数名称以帮助 SWIG,例如 void add(int x, int y, int *OUTPUT),但是使用 %apply 来实现相同的结果容易,如下所示。

    5.3K40

    C++内存管理笔记

    ::operator new和::operator delete就是C++标准库的函数了,可以自己重载定制。allocator是C++标准库的分配器类,用于容器的参数,有默认分配器。...+函数 可以重载 allocator::allocate() allocator::deallocate() C++标准库 可自由设计并搭配任何容器 现在来小试牛刀,使用上述的各种动态分配操作: #include...对于上面的operator new函数,其VC98源代码如下: void* operator new(size_t size, const std::nothrow_t&) _THROW0() //第二参数是为了抛出异常...知道了上面的原理,现在来说说为什么array new和array delete需要搭配使用搭配使用就是报错呢?...size, void* start), size= 4 start= 0x61fd8c Foo::Foo(int) operator new(size_t size), size= 4 Foo::Foo

    44520

    C++纯虚函数 virtual =0

    B: public A { public:     virtual void foo() { cout << "B::foo() is called" << endl;} }; 那么,在使用的时候,...仍然针对上面的类层次,但是使用的方法变的复杂了一些: void bar(A * a) {     a->foo();  // 被调用的是A::foo() 还是B::foo()?...重写的函数必须有一致的参数表和返回值(C++标准允许返回值不同的情况,这个我会在“语法”部分简单介绍,但是很少编译器支持这个feature)。...是指编写一个与已有函数同名但是参数表不同的函数。例如一个函数即可以接受整型数作为参数,也可以接受浮点数作为参数。  2. 虚函数的语法      虚函数的标志是“virtual”关键字。...};     这种情况下,B::foo()是虚函数,C::foo()也同样是虚函数。因此,可以说,基类声明的虚函数,在派生类中也是虚函数,即使不再使用virtual关键字。

    1.6K40
    领券