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

C++或C中foo(void)和foo()之间有区别吗?

在C++或C语言中,foo(void)和foo()之间没有区别。这两种写法都表示函数foo不接受任何参数。在C语言中,通常使用foo()来表示不接受参数的函数,而在C++中,更推荐使用foo(void)来表示不接受参数的函数。但是,这两种写法在功能上是相同的。

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

相关·内容

c++c语言之间什么区别

C语言与C++区别有很多:   CC++的最大区别:在于它们的用于解决问题的思想方法不一样。...2,C语言标准的函数库,它们松散的,只是把功能相同的函数放在一个头文件;而C++对于大多数的函数都是集成的很紧密,特别是C语言中没有的C++的API是对Window系统的大多数API有机的组合,...3,特别是C++的图形处理,它语言的图形很大的区别C语言中的图形处理函数基本上是不能用在C++的。C语言标准不包括图形处理。...4,CC++中都有结构的概念,但是在C语言中结构只有成员变量,而没成员方法,而在C++结构,它可以自己的成员变量成员函数。...8,C++对可以自动生成你想要的程序结构使你可以省了很多时间。很多可用的工具如加入MFC的类的时候,加入变量的时候等等。

2.2K30

C++结构体类的区别_c++结构体

堆的空间相对较大.但是存储在堆的数据的访问效率相对较低. 3.类是反映现实事物的一种抽象,而结构体的作用只是一种包含了具体不同类别数据的一种包装,结构体也可以继承,也可以函数(c结构体没有函数),...,空结构体的大小为0,而C++中空结构体/类 的大小为1。...C++中空类的大小为1的原因:   空类也可以实例化,类实例化出的每个对象都需要有不同的内存地址,为使每个对象在内存的地址不同,所以在类中会加入一个隐含的字节。...int in; virtual void func() { } }; int main() { A a; B b; C c; D d; cout<<sizeof(a)<<endl;//result=...如发现本站涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

95510
  • CC++工程师面试题(指针篇)

    什么是函数指针,如何定义函数指针,与指针函数区别 参考链接:函数指针指针函数区别 智能指针 参考链接:智能指针的用法 指针常量常量指针常量指针常量 define与const关键字的多种用法...-CSDN博客 nullptr调用成员函数可以?...用freedelete释放了内存之后,立即将指针设置为NULL,防止“野指针” c++指针引用的区别 指针可以被重新赋值指向其他变量,而引用一旦绑定到一个变量上就不能再绑定到其他变量上。...传参区别 #include using namespace std; void foo(int* ptr) {//指针 *ptr = 42; cout<<"*ptr..."Double free"是一种内存管理错误,通常发生在动态内存分配释放的情境。它指的是尝试多次释放同一块内存的错误行为。这种错误可能会导致程序崩溃、不稳定性数据损坏。

    26610

    【译】理解CC++的左值右值

    “右值”在CC++编程并不经常使用,但一旦使用到左值右值,它们的含义好像并非那么清楚。...cv限定非cv限定的版本是两种不同的类型,但它们要有相同的representation(?)对齐要求。 这右值什么联系?在C,右值不会有cv限定符,只有左值。...在C++,类的右值可以cv限定符,但内置类型(int、double等)不可以。...再次说明,上述示例只是右值引用移动语义的冰山一角。正如你们所想,右值引用移动语义是及其复杂的一个分支,需要考虑一些特殊的场景目标。笔者在这里只是简单的展示了在C++左值右值的区别。...然而,本文的目的是想帮助各位对C++代码更深入的理解,并且能更加容易理解程序语言专家们制定的规范。 另一方面,C++11介绍了右值引用移动语义,新的C++规范关于左值右值的论述越来越重要。

    1.2K10

    C++面试题

    C++面试3 1、WebSocketSocket什么区别? 2、对高并发熟悉么?你们做的TCP Server并发量高么? 3、你最近的一份工作遇到的一个难点问题是什么?你是怎么解决的?...9、WebSocketSocket什么区别? 10、谈谈Qt的DBus C++面试5 1、STL vector做大量push_back操作时会出现什么问题?...struct A { virtual void foo(void) { } } struct B: public A { void foo(void) { foo(); // 递归调用自己,即...C++面试7 1、二级指针 指针的指针一般用来做什么? 2、动态数组使用C语言怎么实现? 3、对Linux熟悉? 4、进程线程什么区别?线程间的数据可以共享么?...5、TCPUDP的什么区别? TCP服务端、客户端的实现流程一般是什么样的? UDP需要建立连接么? 6、信号量一般怎么使用,熟悉么? 7、C语言或者C++static关键字的作用? 1.

    2.2K30

    c++系列之二 指向成员函数的指针(烧脑)

    关于成员函数指针 成员函数指针是C++最少用到的语法之一,甚至经验的C++码农有时候也会被它搞晕。这是一篇针对于初学者的教程,同时也给经验的码农分享了一些我个人对底层机制的挖掘。...除了它其它的类成员共享命名空间Foo(在我们的例子命名空间是 Foo:: )之外,它常规全局函数是一样的。...另外,为什么C++如此费心地去发明这样的语法?很简单,因为它常规指针是不同的东西,而且这样的类型转换也是违反直觉的。...因为 “一个指向虚成员的指针能在不同地址空间之间传递,只要二者使用的对象布局一样” (此话来自C++老爸 Bjarne Stroustrup 的 《C++程序设计语言》 )。...结论 简单总结一下,通过上述文章,我们学到了: 成员函数指针声明定义的语法 使用成员指针选择操作符来调用成员函数的语法 使用 typedef 写出更加清晰的代码 非虚成员函数、虚函数、静态成员函数之间区别

    3K20

    内联函数 c-浅谈内联函数与宏定义的区别详解

    文章(二)   8.5.1 用内联取代宏代码   C++ 语言支持函数内联,其目的是为了提高函数的执行效率(速度)。   在 C程序,可以用宏代码提高执行效率。宏代码本身不是函数,但使用起来象函数。...C++ 语言的函数内联机制既具备宏代码的效率,又增加了安全性,而且可以自由操作类的数据成员。所以在C++ 程序,应该用内联函数取代所有宏代码,“断言assert”恐怕是唯一的例外。...类的构造函数析构函数容易让人误解成使用内联更有效。要当心构造函数析构函数可能会隐藏一些行为,如“偷偷地”执行了基类成员对象的构造函数析构函数。...每个类只有一个析构函数一个赋值函数,但可以多个构造函数(包含一个拷贝构造函数,其它的称为普通构造函数)。...原因如下:   (1)如果使用“缺省的无参数构造函数”“缺省的析构函数”,等于放弃了自主“初始化”“清除”的机会,C++发明人的好心好意白费了。

    67740

    【CC++】extern 的一些注意事项

    前言 前些日子,友友问了我这样的一道问题: 数组通过外部声明为指针时,数组指针是不能互换使用的;那么请思考一下,在 A 文件定义数组 char a[100];在 B 文件声明为指针:extern...char *a;此时访问 a[i],会发生什么; 先说结果,会引起 segmentation fault 报错; 那接下来由博主来分析一番; 数组与指针的区别 在介绍 extern 之前,我们需要了解一下数组与指针什么区别...具体分析 了解了数组与指针的区别之后,让我们来看看 extern 声明全局变量的内部实现; extern 是 C/C++ 语言中表明函数全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数变量可以在本模块其它模块中使用...例如,假设某个函数的原型为: void foo( int x, int y ); 该函数被 C 编译器编译后在符号库的名字为 _foo,而 C++ 编译器则会产生像 _foo_int_int 之类的名字...例如,在 C++ ,函数 void foo(int x, int y) 与 void foo(int x, float y) 编译生成的符号是不相同的,后者为 _foo_int_float。

    35510

    60秒问答:多态函数重载的关系?

    名词隐藏机制重载 new 函数 例子(liunx api返回值设计 1返回错误 2 抛异常3 抛信号) 隐藏可以避免,在c++11呢?...编译时的多态:函数重载运算符重载(根据参数不同选择具体函数 ) 运行时的多态:通过类继承虚函数实现的(根据虚表指针 指向 派生类的函数,还是基类的函数) 四、 类型转换有几种情况,什么区别?...这个概念很模糊,不清楚, 就是具体执行那个函数? case1. if a if b, if c 是多态?表现不一样。...[定义] C++支持两种多态性:编译时多态性,运行时多态性。 1.编译时的多态:函数重载运算符重载,在编译时就决定调用哪个函数,先期联编 early binding ?...编译时的多态:函数重载运算符重载(根据参数不同选择具体函数 ) 运行时的多态:通过类继承虚函数实现的(根据虚表指针 指向 派生类的函数,还是基类的函数) 四、 类型转换有几种情况,什么区别

    1.4K10

    Lua的函数式编程

    查到的问题后,我足足想了5分钟才明白过来为什么sock会被GC掉。 因为潜意识foo.lua类似于下面C代码,其中sock变量是与整个C代码的生命周期一致的。而在C语言中,代码是不会被回收的。...却从来没在意过,整个编程范式,数据的生命周期是以何种方式被管理着,以及数据在以何种方式进行转换通信。 借着这个Bug的契机,我从数据的视角来重新审视了一下这些话,了一些意想不到的发现。...在纯面向对象编程语言中(C++显然不算),所有的逻辑交互均是在对象之间产生的,不允许变量产生在对象之外。 即使他们在努力的模仿函数式编程,比如所谓的委托,匿名函数。...:"如果一个语言支持将函数作为参数传入其他函数,将其作为值从其他函数返回,并且将它们向变量赋值将他们存储在数据结构,就在这门语言中,函数是一等公民。...我认为对于C/C++背景的人来讲,这不足以解释函数式编程的特点。 因为在C/C++语言中,函数指针同样可以做到上述所有的事情。

    1.2K20

    计算机考研复试C语言常见面试题「建议收藏」

    C++C区别 2 3、Java的方法重载 2 4、重写重载 2 5、面向对象编程 3 6、c++可以多个父类 3 7、指针与引用 4 8、structclass的区别C++) 4 9、c+...2、C++C区别 设计思想上: C++是面向对象的语言,而C是面向过程的结构化编程语言 语法上: C++具有封装、继承多态三种特性 C++相比C,增加了许多类型安全的功能,比如强制类型转换、 C+...4、重写重载 5、面向对象编程 (1)封装:将数据函数集合在一个类类。 (2)继承:子类可以继承父类的一些数据函数。 (3)多态:运行时,可以通过指向基类的指针,调用派生类的方法。...) 引用初始化后不能再引用其他对象 8、structclass的区别C++) 共同点:structclass都可以定义成员函数,都具有继承、多态。...它是对对象的一种弱引用,不会增加对象的引用计数,shared_ptr之间可以相互转化。

    1.6K30

    C++单继承、多继承情况下的虚函数表分析

    C++的三大特性之一的多态是基于虚函数实现的,而大部分编译器是采用虚函数表来实现虚函数,虚函数表(VTAB)存在于可执行文件的只读数据段,指向VTAB的虚表指针(VPTR)是包含在类的每一个实例当中。...《深度探索C++对象模型》 一、单继承 1 #include 2 #include 3 using namespace std; 4 class A {...再简单总结一下 覆盖 隐藏 重载 的区别: 覆盖 是C++虚函数的实现原理,基类的虚函数被子类重写,要求函数参数列表相同; 隐藏 是C++的名字解析过程,分两种情况,基类函数virtual,参数列表不同...,基类函数没有virtual,无论参数列表是否相同。...重载 是在同一命名空间中根据参数对同名函数的区别

    2.7K10

    盘点C++20模块那些事

    C++20引入了一种替代 #include 指令的新方式,称为模块。 下面来深入学习一下模块。 1.模块单元 C++模块由一个多个翻译单元(tu)组成,其中包含用于模块声明的特定关键字。...其目的是将模块的接口实现封装在单个翻译单元,而不暴露实现细节。 例如:我想要创建一个Shape,计算其面积。...g++-13 -std=c++20 -fmodules-ts -x c++-system-header iostream g++-13 -fmodules-ts -std=c++20 -x c++ shape.cppm...➜ g++-13 -fmodules-ts -std=c++20 -x c++ shape.cppm circle.cppm rectangle.cppm shape.cc shape:circle:...不过它们在使用的时候一些区别,例如:当子分区被引入时,使用其接口引发错误:internal compiler error: Segmentation fault: 11,而子模块是可以正常被引入使用。

    34210

    认识目标文件的符号

    另外 C++ 还在语言级别支持名称空间,即允许在不同的名称空间多个同样名字的符号。...可以看到名称空间、类型、函数名、参数返回值的类型都被加入了修饰后的名称,这样编译器链接器就可以区别同名但不同参数类型名字空间的函数,而不会导致链接时候函数多重定义。...所以很明显,上面的代码C++的名称修饰机制将不会起作用。 由于 GCC 对 C 的变量函数没有修饰,对 C++ 的变量进行了修饰,下面看一个使用未经修饰的 C 的符号来访问C++的变量的例子。...幸好我们一种很好的方法可以解决上述问题,就是使用 C++ 的宏 “__cplusplus”,C++ 编译器会在编译 C++ 的程序时默认定义这个宏,我们可以使用条件宏来判断当前编译单元是不是 C++...一个改进的例子是: __attribute__ ((weakref)) void foo(); int main() { if(foo) foo(); } 这种弱符号弱引用对于库来说十分有用,比如库定义的弱符号可以被用户定义的强符号所覆盖

    1.5K40

    CC++inline用法详解

    (一)inline函数(摘自C++ Primer的第三版) 在函数声明定义函数返回类型前加上关键字inline即把min()指定为内联。      ...Foo 则成为内联函数: void Foo(int x, int y); inline void Foo(int x, int y) // inline 与函数定义体放在一起 { } 所以说,inline...类的构造函数析构函数容易让人误解成使用内联更有效。要当心构造函数析构 函数可能会隐藏一些行为,如“偷偷地”执行了基类成员对象的构造函数析构函数。...C++ 语言支持函数内联,其目的是为了提高函数的执行效率(速度)。 在C程序,可以用宏代码提高执行效率。宏代码本身不是函数,但使用起来象函数。...C++ 语言的函数内联机制既具备宏代码的效率,又增加了安全性,而且可以自由操作类的数据成员。 所以在C++ 程序,应该用内联函数取代所有宏代码,"断言assert"恐怕是唯一的例外。

    1.8K30

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

    11.1.1 类型转换 包装器代码生成中最重要的问题之一是编程语言之间数据类型的转换编组。具体来说,对于每个 C/C++ 声明,SWIG 必须以某种方式生成包装器代码,允许值在语言之间来回传递。...代码通常是 C C++ 代码,它们将生成到 C/C++ 包装函数。请注意,情况并非总是如此,因为某些目标语言模块允许在生成到目标语言特定文件的类型映射中使用目标语言代码。...假设你一个这样的 C++ 函数 C++int foo(std::string *s); 并且您想将目标语言中的本机字符串作为参数传递。...Foo *create_foo(); void destroy_foo(Foo *foo); 或在成员方法C++%delobject Foo::destroy; class Foo { public...(int i, double d); 而不是这些包装方法: C++void hello(int i);void hello(); 如果使用了compactdefaultargs,则在特性中指定不指定默认参数之间区别不适用

    3.6K30
    领券