精华内容
参与话题
问答
  • CPP经典代码大全

    2012-08-21 09:59:42
    这是c++最基本的代码,可以通过熟悉它来熟悉c++
  • CPP的简单例子

    2016-11-20 00:12:40
    谭浩强的C++中的案例,对于C++学习者,这可能不是最好的选择,但是,也给需要的人分享下
  • C++中的 .h 和 .cpp 区别详解

    千次阅读 多人点赞 2018-09-29 09:15:02
    于是,在C++中就要分出了头(.h)文件和实现(.cpp)文件,并且也有了Package的概念。 对于以C起步,C#作为“母语”的我刚开始跟着导师学习C++对这方面还是感到很模糊。虽然我可以以C的知识面对C++的语法规范,用C#的...

    在C++编程过程中,随着项目的越来越大,代码也会越来越多,并且难以管理和分析。于是,在C++中就要分出了头(.h)文件和实现(.cpp)文件,并且也有了Package的概念。

    对于以C起步,C#作为“母语”的我刚开始跟着导师学习C++对这方面还是感到很模糊。虽然我可以以C的知识面对C++的语法规范,用C#的思想领悟C++中类的使用。但是C#中定义和实现是都在一个文件中(其实都是在类里面),而使用C的时候也只是编程的刚刚起步,所写的程序也只要一个文件就够了。因此对于C++的Package理解以及.h文件和.cpp文件的总是心存纠结。

    幸好导师有详细的PPT让我了解,一次对于Package的认识就明白多了。简单讲,一个Package就是由同名的.h和.cpp文件组成。当然可以少其中任意一个文件:只有.h文件的Package可以是接口或模板(template)的定义;只有.cpp文件的Package可以是一个程序的入口。

    当然更具体详细的讲解,欢迎下载导师的教学PPT-Package来了解更多。

     

    不过我在这里想讲的还是关于.h文件和.cpp文件

    知道Package只是相对比较宏观的理解:我们在项目中以Package为编辑对象来扩展和修正我们的程序。编写代码时具体到应该把什么放到.h文件,又该什么放在.cpp文件中,我又迷惑了。

    虽然Google给了我很多的链接,但是大部分的解释都太笼统了:申明写在.h文件,定义实现写在.cpp文件。这个解释没有差错,但是真正下手起来,又会发现不知道该把代码往哪里打。

     

    于是我又把这个问题抛给了导师,他很耐心地给我详详细细地表述了如何在C++中进行代码分离。很可惜,第一次我听下了,但是没有听太懂,而且本来对C++就了解不深,所以也没有深刻的印象。

    经过几个项目的试炼和体验之后,我又拿出这个问题问导师,他又一次耐心地给我讲解了一遍(我发誓他绝对不是忘记了我曾经问过同样的问题),这次我把它记录了下来。

    为了不再忘记,我将它们总结在这里。

    概览

      非模板类型(none-template)             模板类型(template)            
    头文件(.h)            
    • 全局变量申明(带extern限定符)

    • 全局函数的申明

    • inline限定符的全局函数的定义

    • 类的定义

    • 类函数成员和数据成员的申明(在类内部)

    • 类定义内的函数定义(相当于inline)

    • static const限定符的数据成员在类内部的初始化

    • inline限定符的类定义外的函数定义

    • 模板类的定义

    • 模板类成员的申明和定义(定义可以放在类内或者类外,类外不需要写inline)

    实现文件(.cpp)
    • 全局变量的定义(及初始化)

    • 全局函数的定义

    (无)
    • 类函数成员的定义

    • 类带static限定符的数据成员的初始化

    *申明:declaration
       *定义:definition

    头文件

    头文件的所有内容,都必须包含在

    #ifndef  {Filename}              
     #define       {Filename}              
     
     //  {Content of head file}              
     
     #endif        

    这样才能保证头文件被多个其他文件引用(include)时,内部的数据不会被多次定义而造成错误

    inline限定符

    在头文件中,可以对函数用inline限定符来告知编译器,这段函数非常的简单,可以直接嵌入到调用定义之处。

    当然inline的函数并不一定会被编译器作为inline来实现,如果函数过于复杂,编译器也会拒绝inline。

    因此简单说来,代码最好短到只有3-5行的才作为inline。有循环,分支,递归的函数都不要用做inline。

    对于在类定义内定义实现的函数,编译器自动当做有inline请求(也是不一定inline的)。因此在下边,我把带有inline限定符的函数成员和写在类定义体内的函数成员统称为“要inline的函数成员”

    非模板类型

    全局类型

    就像前面笼统的话讲的:申明写在.h文件。

    对于函数来讲,没有实现体的函数,就相当于是申明;而对于数据类型(包括基本类型和自定义类型)来说,其申明就需要用extern来修饰。

    然后在.cpp文件里定义、实现或初始化这些全局函数和全局变量。

    不过导师一直反复强调:不许使用全局函数和全局变量。用了之后造成的后果,目前就是交上去的作业项目会扣分。当然不能用自有不能用的理由以及解决方案,不过不在目前的讨论范围内。

     

    自定义类型

    对于自定义类型,包括类(class)和结构体(struct),它们的定义都是放在.h文件中。其成员的申明和定义就比较复杂了,不过看上边的表格,还是比较清晰的。

    函数成员

    函数成员无论是否带有static限定符,其申明都放在.h文件的类定义内部。

    对于要inline的函数成员其定义放在.h文件;其他函数的实现都放在.cpp文件中。

    数据成员

    数据成员的申明与定义都是放在.h文件的类定义内部。对于数据类型,关键问题是其初始化要放在什么地方进行。

    对于只含有static限定符的数据成员,它的初始化要放在.cpp文件中。因为它是所有类对象共有的,因此必须对它做合适的初始化。

    对于只含有const限定符的数据成员,它的初始化只能在构造函数的初始化列表中完成。因为它是一经初始化就不能重新赋值,因此它也必须进行合适的初始化。

    对于既含有static限定符,又含有const限定符的数据成员,它的初始化和定义同时进行。它也是必须进行合适的初始化

    对于既没有static限定符,又没有const限定符的数据成员,它的值只针对本对象可以随意修改,因此我们并不在意它的初始化什么时候进行。

     

    模板类型

    C++中,模板是一把开发利器,它与C#,Java的泛型很相似,却又不尽相同。以前,我一直只觉得像泛型,模板这种东西我可能一辈子也不可能需要使用到。但是在导师的强制逼迫使用下,我才真正体会到模板的强大,也真正知道要如何去使用模板,更进一步是如何去设计模板。不过这不是三言两语可以讲完的,就不多说了。

    对于模板,最重要的一点,就是在定义它的时候,编译器并不会对它进行编译,因为它没有一个实体可用。

    只有模板被具体化(specialization)之后(用在特定的类型上),编译器才会根据具体的类型对模板进行编译。

    所以才定义模板的时候,会发现编译器基本不会报错(我当时还很开心的:我写代码尽然会没有错误,一气呵成),也做不出智能提示。但是当它被具体用在一个类上之后,错误就会大片大片的出现,却往往无法准确定位。

    因此设计模板就有设计模板的一套思路和方式,但是这跟本文的主题也有偏。

     

    因为模板的这种特殊性,它并没有自己的准确定义,因此我们不能把它放在.cpp文件中,而要把他们全部放在.h文件中进行书写。这也是为了在模板具体化的时候,能够让编译器可以找到模板的所有定义在哪里,以便真正的定义方法。

    至于模板类函数成员的定义放在哪里,导师的意见是放在类定义之外,因为这样当你看类的时候,一目了然地知道有那些方法和数据;我在用Visual Studio的时候查看到其标准库的实现,都是放在类内部的。

    可能是我习惯了C#的风格,我比较喜欢把它们都写在类内部,也因为在开发过程中,所使用的编辑器都有一个强大的功能:代码折叠。

    当然还有其他原因就是写在类外部,对于每一个函数成员的实现都需要把模板类型作为限定符写一遍,把类名限定符也要写一遍。

    --------------------- 本文来自 一日看尽长安花 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/TColin/article/details/51593873?utm_source=copy

    展开全文
  • visual studio新手使用教程

    万次阅读 多人点赞 2018-09-18 12:37:39
    目录 1.下载安装Visual Studio 2.新建工程 3.新建项目 4.添加源文件 5.编译一闪而退的问题 ...6.使用scanf函数报错问题 ...对于刚刚接触编程的新手来说,最先需要熟练掌握的当然是语言之祖——C语言,而C语言编译器...

     

    目录

    1.下载安装Visual Studio

    2.新建工程

    3.新建项目

    4.添加源文件

    5.编译一闪而退的问题

    6.使用scanf函数报错问题

    7.VS常用调试程序快捷键

    8.VS的调试窗口

    9.工具->选项



    对于刚刚接触编程的新手来说,最先需要熟练掌握的当然是语言之祖——C语言,而C语言编译器首当其冲的必然是visual studio ,小编入门使用VC6.0,现在看来VC6.0这一“骨灰级”编译器漏洞百出,早该被淘汰。

    1.下载安装Visual Studio

    首先,你可以去这里下载最新版的VS,选择正确的安装路径,进行默认安装。

    2.新建工程

    进入VS之后,点击左上角文件->新建->项目(也可以直接点击起始页面的新建项目)这是新建一个工程的操作,而我们要写代码就需要新建工程。

    3.新建项目

    可以看到小编选择了Visual C++->空项目,可以自定义工程名称(建议命名规范化,意思就是说,写一个你一看到工程名称就知道是做什么的代码),自定义工程存储位置(一定要把你的代码放在你想放的位置,方便后续维护)然后点击确定。

    4.添加源文件

    视图->解决资源管理器,接下来开始双击源文件,添加->新建项,这里可以看到下图,我们可以对源文件名称进行重命名:比如以test为例,建立一个名为test的C语言代码,就要命名为test.c,如果命名为test.cpp则为C++程序,如果命名为test.h则为头文件程序。

    5.编译一闪而退的问题

    小编创建了test.c,插入了如下代码,点击本地Windows调试器,没错,你看到了屏幕一闪而过,这是程序完成了调试执行。

    #include<stdio.h>
    
    int main()
    {
    	printf("hello,world\n");
    	return 0;
    }

    要想看到输出结果有以下方式:

    a、将代码改成如下样子:

    getchar()函数等待从从键盘获取一个字符串,如果不输入一个字符串,getchar()函数就阻塞等待,这个方法并不完全适用于所有情况。getchar函数,阻塞等待一个字符串,如果此时缓存区有字符的话,那么这个getchar函数就不能解决程序一闪而过不停下来的问题。那么在getchar();之前最好加上fflush(stdin),就确保万无一失了。

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    
    int main()
    {
    	int num;
    	scanf("%d", &num);
    	printf("%d\n", num);
    	fflush(stdin);
    	getchar();
    	return 0;
    }

    b、不建议使用上述a方式,需要考虑的因素太多,建议在return 0;之前加下面这段代码

    system("pause");

    上述这句代码是调用了系统接口,让编译器暂停下来,需要添加头文件stdlib.h。

    6.使用scanf函数报错问题

    scanf函数是从标准输入去获取数据,C语言中默认用空格为界限去控制输入的长度。比如scanf("%d%d",&a,&b);当执行到这句代码时候,你需要在显示屏输入两个数字,用空格分割开。比如你输入了10 20。系统会识别到这是两个字符串,将其存储指定位置。

    可是今天我想输入的是scanf("%s%s",&s1,&s2);我要输入的s1是I am Bob!,s2是What is your name?

    系统很难识别那部分是s1,那部分是s2,很容易造成越界访问的问题,所以visual studio会提示不安全的函数。visual studio 在解决这个问题时候实现了一个scanf_s的函数。这个函数有三个参数第三个参数是从标准输入获取的数据长度的长度。

    scanf("%s",&s1,10);这个函数并不是C语言标准的函数,只是vistual studio 平台的函数,如果你使用scanf_s这样的函数,你的代码不能再其它平台跑。所以不建议使用scanf_s函数。

    建议使用#define _CRT_SECURE_NO_WARNINGS将这个错误规避掉。(这句加粗必看,前面可以不看)

    接下来给大家介绍一种偷懒方法:我们在平时学习过程中经常会用到scanf函数,为了不让它再出现这类问题,由于

    我的VS安装在D盘,所以我打开了它,找到了如上路径,在VC->newc++file中加入#define _CRT_SECURE_NO_WARNINGS

    ,保存退出。以后我每次新建一个新项目,就会有这么一句话。

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>//标准库头文件
    #include<stdlib.h>//包含system()函数的头文件
    
    int main()
    {
    	int a = 0;
    	scanf("%d", &a);
    	system("pause");
    	return 0;
    }
    

    7.VS常用调试程序快捷键

    调试:编译程序F7
    调试:运行程序ctrl + F5
    调试:打断点F9
    调试:运行到断点位置F5
    调试:单步执行F10
    调试:单步进入函数F11
    调试:结束调试shift+F5
    VS常用编辑快捷键 编辑.注释选定内容Ctrl + K,Ctrl + C
    编辑.取消注释选定内容Ctrl + K,Ctrl + U
    编辑.删除行Ctrl + Shift + L删除所有选定行;如果没有选定行,则删除当前行。

    8.VS的调试窗口

    在F10单步调试状态下,打开调试->窗口,调试窗口中有监视(可用来监视变量等),内存,线程,堆栈,寄存器,反汇编等窗口用来帮助调试程序。可以通过这些窗口配合逐步调试,查看程序中的运行状况,分析bug可能产生的原因。最常用的就是监视窗口来查看变量的变化情况。有时候监视窗口会和内存窗口显示结果不一致,那肯定要相信内存窗口,监视窗口数据可能来自于寄存器。

    9.工具->选项

    除此之外,小编还会对编译器设置,方法是打开工具->选项,进行各种设置,比如字体大小、颜色、格式等等。

     

    展开全文
  • .c文件与.cpp文件区别

    万次阅读 2018-10-25 19:29:31
    在编译源文件时,C编译器和C++编译器都会对符号(函数或变量)名作某些修正,但两者采用的修正方法不同,所以两者生成的目标文件不能互相链接。  在C++中使用extern "C"可以让C++符号获得C链接特性。...

    在编译源文件时,C编译器和C++编译器都会对符号(函数或变量)名作某些修正,但两者采用的修正方法不同,所以两者生成的目标文件不能互相链接。
         在C++中使用extern "C"可以让C++符号获得C链接特性。由于C++编译器会自动定义__cplusplus宏,所以在C语言头文件中采用这种结构可以保证无论使用何种编译器,生成的目标文件都具有C链接特性,能够与标准C编译器所生成的目标文件相链接。通常c/c++编译器会根据文件后缀来选择符号修正,所以最好把c的代码放到.c文件中,把c++的代码放到.cpp文件中。
         用VC++6.0创建动态库
         在test.cpp中输出c函数,如下:
               1、新建Win32 Dynamic-Link Library
               2、输出函数extern "C" _declspec(dllexport) void far test(); void far test(){ }
        而在test.c中输出c函数,就可以这样,如下:
               1、新建Win32 Dynamic-Link Library
               2、输出函数_declspec(dllexport) ...

    展开全文
  • .c与.cpp的区别解析

    千次阅读 2019-07-17 21:56:11
    这几天在练习数据结构等知识的时候,有时遇见文件保存为c后缀则能编译通过,有时又是保存cpp后缀才能通过。对于这个都没能区分清,是自己的基本功问题,于是百度了一下。幸好有许多和我一样有问题的人。  其实简单...

    这几天在练习数据结构等知识的时候,有时遇见文件保存为c后缀则能编译通过,有时又是保存cpp后缀才能通过。对于这个都没能区分清,是自己的基本功问题,于是百度了一下。幸好有许多和我一样有问题的人。

      其实简单来说,cpp就是编译c++文件,支持c++语法,而c就是编译c语言文件,支持c语言。2者的区别就在于语法和编译时的确别吧。

      当然,对于类的引用和某些函数都是应该区别对待的。具体的内容可以参考下面的文章:

     

    extern "C"的用法解析

     

    C++中extern “C”含义深层探索

                                         

    1.引言

      C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,

    C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言

    ,为了支持函数的重载,C++对全局函数的处理方式与C有明显的不同。

     

    2.从标准头文件说起

      某企业曾经给出如下的一道面试题:

      面试题

      为什么标准头文件都有类似以下的结构?

        #ifndef __INCvxWorksh

        #define __INCvxWorksh

        #ifdef __cplusplus

        extern "C" {

        #endif

        /*...*/

        #ifdef __cplusplus

        }

        #endif

        #endif /* __INCvxWorksh */

      分析

      显然,头文件中的编译宏“#ifndef __INCvxWorksh、#define __INCvxWorksh、#endif” 的作用是防止该头文件被重复引用。

      那么

    #ifdef __cplusplus

    extern "C" {

     #endif

     #ifdef __cplusplus

    }

    #endif

      的作用又是什么呢?我们将在下文一一道来。

     

    3.深层揭密extern "C"

      extern "C" 包含双重含义,从字面上即可得到:首先,被它修饰的目标是“extern”的;其次,被它修饰的目标是“C”的。让我们来详细解读这两重含义。

      被extern "C"限定的函数或变量是extern类型的;

      extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。记住,下列语句:

      extern int a;

      仅仅是一个变量的声明,其并不是在定义变量a,并未为a分配内存空间。变量a在所有模块中作为一种全局变量只能被定义一次,否则会出现连接错误。

      通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明。例如,如果模块B欲引用该模块A中定义的全局变量和函数时只需包含模块A的头文件即可。这样,模块B中调用模块A中的函数时,在编译阶段,模块B虽然找不到该函数,但是并不会报错;它会在连接阶段中从模块A编译生成的目标代码中找到此函数。

      与extern对应的关键字是static,被它修饰的全局变量和函数只能在本模块中使用。因此,一个函数或变量只可能被本模块使用时,其不可能被extern “C”修饰。

      被extern "C"修饰的变量和函数是按照C语言方式编译和连接的;

      未加extern “C”声明时的编译方式

      首先看看C++中对类似C的函数是怎样编译的。

      作为一种面向对象的语言,C++支持函数重载,而过程式语言C则不支持。函数被C++编译后在符号库中的名字与C语言的不同。例如,假设某个函数的原型为:

    void foo( int x, int y );

      该函数被C编译器编译后在符号库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字(不同的编译器可能生成的名字不同,但是都采用了相同的机制,生成的新名字称为“mangled name”)。

      _foo_int_int这样的名字包含了函数名、函数参数数量及类型信息,C++就是靠这种机制来实现函数重载的。例如,在C++中,函数void foo( int x, int y )与void foo( int x, float y )编译生成的符号是不相同的,后者为_foo_int_float。

      同样地,C++中的变量除支持局部变量外,还支持类成员变量和全局变量。用户所编写程序的类成员变量可能与全局变量同名,我们以"."来区分。而本质上,编译器在进行编译时,与函数的处理相似,也为类中的变量取了一个独一无二的名字,这个名字与用户程序中同名的全局变量名字不同

     

     未加extern "C"声明时的连接方式

      假设在C++中,模块A的头文件如下:

    // 模块A头文件 moduleA.h

    #ifndef MODULE_A_H

    #define MODULE_A_H

    int foo( int x, int y );

    #endif

      在模块B中引用该函数:

    // 模块B实现文件 moduleB.cpp

    #include "moduleA.h"

    foo(2,3);

      实际上,在连接阶段,连接器会从模块A生成的目标文件moduleA.obj中寻找_foo_int_int这样的符号!

      加extern "C"声明后的编译和连接方式

      加extern "C"声明后,模块A的头文件变为:

    // 模块A头文件 moduleA.h

    #ifndef MODULE_A_H

    #define MODULE_A_H

    extern "C" int foo( int x, int y );

    #endif

      在模块B的实现文件中仍然调用foo( 2,3 ),其结果是:

      (1)模块A编译生成foo的目标代码时,没有对其名字进行特殊处理,采用了C语言的方式;

      (2)连接器在为模块B的目标代码寻找foo(2,3)调用时,寻找的是未经修改的符号名_foo。

      如果在模块A中函数声明了foo为extern "C"类型,而模块B中包含的是extern int foo( int x, int y ) ,则模块B找不到模块A中的函数;反之亦然。

      所以,可以用一句话概括extern “C”这个声明的真实目的(任何语言中的任何语法特性的诞生都不是随意而为的,来源于真实世界的需求驱动。我们在思考问题时,不能只停留在这个语言是怎么做的,还要问一问它为什么要这么做,动机是什么,这样我们可以更深入地理解许多问题):

      实现C++与C及其它语言的混合编程。

    明白了C++中extern "C"的设立动机,我们下面来具体分析extern "C"通常的使用技巧。

     

      4.extern "C"的惯用法

      (1)在C++中引用C语言中的函数和变量,在包含C语言头文件(假设为cExample.h)时,需进行下列处理:

    extern "C"

    {

    #include "cExample.h"

    }

      而在C语言的头文件中,对其外部函数只能指定为extern类型,C语言中不支持extern "C"声明,在.c文件中包含了extern "C"时会出现编译语法错误。

      笔者编写的C++引用C函数例子工程中包含的三个文件的源代码如下:

    /* c语言头文件:cExample.h */

    #ifndef C_EXAMPLE_H

    #define C_EXAMPLE_H

    extern int add(int x,int y);     //注:写成extern "C" int add(int , int ); 也可以

    #endif

    /* c语言实现文件:cExample.c */

    #include "cExample.h"

    int add( int x, int y )

    {

     return x + y;

    }

    // c++实现文件,调用add:cppFile.cpp

    extern "C"

    {

     #include "cExample.h"        //注:此处不妥,如果这样编译通不过,换成 extern "C" int add(int , int ); 可以通过

    }

    int main(int argc, char* argv[])

    {

     add(2,3);

     return 0;

    }

      如果C++调用一个C语言编写的.DLL时,当包括.DLL的头文件或声明接口函数时,应加extern "C" { }。

      (2)在C中引用C++语言中的函数和变量时,C++的头文件需添加extern "C",但是在C语言中不能直接引用声明了extern "C"的该头文件,应该仅将C文件中将C++中定义的extern "C"函数声明为extern类型。

      笔者编写的C引用C++函数例子工程中包含的三个文件的源代码如下:

    //C++头文件 cppExample.h

    #ifndef CPP_EXAMPLE_H

    #define CPP_EXAMPLE_H

    extern "C" int add( int x, int y );

    #endif

    //C++实现文件 cppExample.cpp

    #include "cppExample.h"

    int add( int x, int y )

    {

     return x + y;

    }

    /* C实现文件 cFile.c

    /* 这样会编译出错:#include "cExample.h" */

    extern int add( int x, int y );

    int main( int argc, char* argv[] )

    {

     add( 2, 3 );

     return 0;

    }

      如果深入理解了第3节中所阐述的extern "C"在编译和连接阶段发挥的作用,就能真正理解本节所阐述的从C++引用C函数和C引用C++函数的惯用法。对第4节给出的示例代码,需要特别留意各个细节。

     

    今天倩问了我一个问题,就是.c和.cpp文件有没有区别。

    当然是有的。

    在编译源文件时,C编译器和C++编译器都会对符号(函数或变量)名作某些修正,但两者采用的修正方法不同,所以两者生成的目标文件不能互相链接。在C++中使用extern "C"可以让C++符号获得C链接特性。由于C++编译器会自动定义__cplusplus宏,所以在C语言头文件中采用这种结构可以保证无论使用何种编译器,生成的目标文件都具有C链接特性,能够与标准C编译器所生成的目标文件相链接。

    通常c/c++编译器会根据文件后缀来选择符号修正,所以最好把c的代码放到.c文件中,把c++的代码放到.cpp文件中。

    我用VC++6.0创建动态库,做了以下试验。

    在test.cpp中输出c函数,如下:

    1、新建Win32 Dynamic-Link Library

    2、输出函数

    extern "C" _declspec(dllexport) void far test();

    void far test()

    {

     

    }

    而在test.c中输出c函数,就可以这样,如下:

    1、新建Win32 Dynamic-Link Library

    2、输出函数

    _declspec(dllexport) void far test();

    void far test()

    {

     

    }

    看来.c和.cpp还是有很大区别的

    展开全文
  • cpp

    2014-12-17 21:02:00
    #include<iostream> #include<string> #include<limits> usingnamespacestd; intmain() { cout<<"type:\t\t"<<"************size*************...
  • 目录下有test1.cpp,test2.cpp, test3.cpp三个独立文件(彼此之间并无依赖与调用关系), 要编译成三个可执行程序, 怎么搞呢? 我们看看makefile: test1: test1.cpp test2: test2.cpp test3: test3.cpp clean: rm -...
  • .c和.cpp的区别

    万次阅读 2017-07-27 19:51:35
    .c和.cpp的大致区别很明显就能看出来,一个表示C的源程序,一个表示C++的源程序,那么我们今天结合gcc/g++来看一下它们的区别。 代码: [xxx@localhost test]$ cat test.c #include void func() { printf("hello ...
  • CPP入门(3):输入、输出获得字符串输入int length; std::string name,name1,name2; std::cout ; std::cin >> name; //cin使用空白字符作为输入字符串的结束标志 length = name.size(); //返回某给定字符串里的字符
  • C++ list容器

    2020-03-05 14:00:01
    list是一个双向链表容器,可高效地进行插入删除元素。 他与vector和deque有着很大的区别,区别就体现在存储方式上! vector是单端数组,deque是双端数组。 vector与deque的存储都是连续的,而list是不连续的存储!...
  • 当一个main函数的cpp文件包含另一个cpp文件,使用#include "data.cpp" 是不可以的,例如下面 include.cpp #include <stdio.h> #include "data.cpp" //extern void add(); void main() { #include ...
  • Cppcheck 用法(上篇)

    万次阅读 2016-10-11 13:51:24
    简述Cppcheck 是一种 C/C++ 代码缺陷静态检查工具。不同于 C/C++ 编译器及很多其它分析工具,它不检查代码中的语法错误。Cppcheck 只检查编译器检查不出来的 bug 类型,其目的是检查代码中真正的错误(即:零误报)...
  • log4cpp 详解及使用操作

    千次阅读 2019-02-12 14:27:25
    Log4cpp是一个开源的C++类库,它提供了在C++程序中使用日志和跟踪调试的功能。使用log4cpp,可以很便利地将日志或者跟踪调试信息写入字符流、内存字符串队列、文件、回滚文件、调试器、Windows日志、本地syslog和...
  • cppcheck命令行参数说明

    千次阅读 2017-02-07 12:20:55
    汉字均为翻译 以下翻译均采用谷歌... cppcheck [OPTIONS] [files or paths] If a directory is given instead of a filename, *.cpp, *.cxx, *.cc, *.c++, *.c, *.tpp, and *.txx files are checked recursiv
  • log4cpp介绍以及使用

    千次阅读 2015-12-03 23:09:28
    Log4cpp是一个开源的C++类库,它提供了在C++程序中使用日志和跟踪调试的功能。使用log4cpp,可以很便利地将日志或者跟踪调试信息写入字符流、内存字符串队列、文件、回滚文件、调试器、Windows日志、本地syslog和...
  • 如何屏蔽警告:EmulatorService.cpp:448:找不到证书文件:D:\Android\AVD.android\emulator-grpc.cer安全性将被禁用。??? 我一直想解决我的模拟器的一个问题: Emulator: emulator: WARNING: EmulatorService....
  • c++ 开发中利用yaml-cpp读写yaml配置文件

    万次阅读 热门讨论 2019-04-25 14:27:47
    在程序员的开发生涯中,读写配置文件必不可少。 配置文件有利于我们灵活配置工程,解决大量重复...今天的博文介绍的是如何在 C++ 开发中利用 yaml-cpp 开源库读写 yaml 配置文件。 如果有 Python 开发经验的同学...
  • 孙广东 2015.5.25转载请注明出处吧这是 IL2CPP Internals系列中的第二个博客文章。在这篇文章,我们将探讨由 il2cpp.exe 生成的 c + + 代码。一路走来,我们将看到托管的类型怎么样表示在本机代码中,看看运行...
  • 封装log4cpp

    千次阅读 2013-06-07 17:16:56
    log4cpp 是参考 log4j 所写的 c++ 版本的写 log 的库。可以在这里下载   http://log4cpp.sourceforge.net/   我的使用方法是: 1,定义了一个 _LOG4CPP 宏,用来打开或关闭 log4cpp 的调用,以便在完全不需要...
  • log4cpp 使用完全手册

    千次阅读 2018-06-08 16:15:53
    原文链接 点击打开链接一、log4cpp概述 Log4cpp是一个开源的C++类库,它提供了C++程序中使用日志和跟踪调试的功能,它的优点如下:提供应用程序运行上下文,方便跟踪调试;可扩展的、多种方式记录日志,包括命令行...
  • Log4cpp介绍及使用

    万次阅读 多人点赞 2012-03-05 14:33:30
    Log4cpp是一个开源的C++类库,它提供了在C++程序中使用日志和跟踪调试的功能。使用log4cpp,可以很便利地将日志或者跟踪调试信息写入字符流、内存字符串队列、文件、回滚文件、调试器、Windows日志、本地syslog和...
  • Emulator: emulator: ERROR: AdbHostServer.cpp:102: Unable to connect to adb daemon on port: 5037 网上找了很多,各种提示要我配置adb的环境变量,杀死占用5037端口的线程…… 毛用没得…… 解决方案:允许...
  • 作者:小玉 ...来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 Unity3D想必大家都不陌生,独立游戏制作者们很多人都在用它,甚至一些大公司也用在很商业的游戏制作上。...
  • log4cpp之Appender

    千次阅读 2013-07-11 10:28:54
    笔者认为Appender是log4cpp中最精彩的一个部分。我仔细阅读了大部分Appender的源代码并对设计者感到非常敬仰。  Log4cpp中所有可直接使用的Appender列表如下:  log4cpp::IdsaAppender // 发送到IDS或者 log4...
  • Unity IL2Cpp

    千次阅读 2018-07-27 14:58:00
    为什么80%的码农都做不了架构师?>>> ...
  • #ifndef 头文件卫士是为了保证类的头文件在一个.cpp文件中被多次引用后会不会出现重复定义的问题,注意,只是防止在一个.cpp文件中被多次引用.     #ifndef ELEMTYPE_H #define ELEMTYPE_H 的意思是,如果前面...
  • 【C++】简单的多个cpp组合程序

    千次阅读 2017-01-04 16:01:19
    //目的:对多个cpp组成大程序的理解 hello.h文件#ifndef HELLO_HPP #define HELLO_HPP //构造类成员函数 class Hello { public: void show() const; }; #endif hello.cpp文件 #include "hello.h" #include using ...
  • ubuntu下安装与使用Log4cpp

    千次阅读 2012-11-01 10:14:45
    ubuntu下安装与使用Log4cpp 1、下载版本:log4cpp-1.1rc3.tar.gz, 该版本中没有1.0版本的那些bug,不需修改,下载地址:http://sourceforge.net/projects/log4cpp/ 2、解压下载的压缩文件:log4cpp-1.1rc3....
  • Unity IL2CPP Bug : IL2CPP error for method 'System.Void <PrivateImplementationDetails>::.ctor()'

空空如也

1 2 3 4 5 ... 20
收藏数 784,453
精华内容 313,781
关键字:

cpp