首页 > 编程语言 >C++_调用函数以及不同数据类型

C++_调用函数以及不同数据类型

时间:2023-12-06 18:12:45浏览次数:35  
标签:typedef 调用 函数 int 数据类型 C++ 调用函数 cpp 链接

调用其他文件中的函数

  add_library可以生成我们所需的动态库或者静态库,我们要把制作出的库文件发布出去供第三方使用
  一些函数方法单独在一个cpp的源文件中定义,然后在另一个源文件中需要用到自定义的函数时直接调用就可以了!
方法1.学过c++的人可能最熟悉的方法还是利用头文件来进行调用
1.首先创建一个method.h头文件,声明一个求最大值的函数max(int x,int y),
   然后再创建一个同名的源文件method.cpp,在该文件中实现函数max(int x,int y)的功能 
2.一个主函数的源文件,包含定义函数的头文件
  并在主函数中调用函数	
3.cmake
    add_executable(main src/main.cpp src/method.cpp)
  或者
   add_library(method src/method.cpp)
   add_executable(main src/main.cpp )
   add_lin_libraries(main method)
  本质时执行了g++
   target_link_libraries链接名为myapp的可执行文件和名为mylib的库时,可能会生成类似以下形式的链接行:
    g++ main.o -o myapp -L/path/to/lib -lmylib	 	   
   
方法2:调用前声明函数
  在c语言中有介绍过,就是不用创建头文件,
  1.直接在method.cpp源文件中定义并实现好max函数后,在主函数文件中调用max函数前声明一下就可以
   声明后调用
  2. add_executable(main src/main.cpp src/method.cpp)

自己使用

静态库不是系统提供的(自己制作或者使用第三方提供的静态库如下命令指定要链接的库路径 
   link_directories(<lib_path>)
   应该尽量避免 link_directories,实在无法避免使用绝对路径增加工程的可移植性。
   绝对路径可以配合 find_library()+ target_link_libraries()
cmake 中,链接静态库的命令如下:
     link_libraries(<static lib> [<static lib>...])    
 如果在生成可执行文件时,链接的是静态库, 这个静态库文件会打包到可执行文件app中。
 如果链接的是动态库里面的数据就不会打包到可执行文件中。当可执行程序被启动并且调用了动态库中的函数的时候,动态库才会被加载到内存 
   cmake 中指定要链接的动态库的时候,应该将命令写到生成了可执行文件之后
target_link_libraries 不仅可以链接动态库,静态库也可以用它来链接
   
对于库的使用者, 只要拿到了头文件和库文件,就可以调用这个库了

C++动态库函数同名冲突

  1.c++也可以通过增加命名空间来解决冲突
  2.
    01. static 修饰一个函数,则这个函数的只能在本文件中调用,不能被其他文件调用
	02. 编译器根据链接先后顺序,依次查找链接库
	   且加载的顺序是由编译时链接的顺序决定的。这也就说符号会以第一个查找到的为准(Symbols are resolved on a first match basis
	03. dlopen函数族,显式指定要调用的动态库  

C++

 C++中函数同名的情况有三种:重载(overload),覆盖(override)和隐藏
    重载:函数名相同,参数不同。重载函数处于同一个范围,比如同一个类中
	函数处于基类和派生类中 派生类的成员函数对基类成员函数的重新定义。这种关系的函数前面要加关键字virtual

数据类型

简洁-高效-可移植
  确定的 依赖于实现的 依赖于编译器的 不确定的 
  
    char字符类型只有8个位,只能包含256个字符,而像很多外文字符远超过256个字符,例如:中文、日文、韩文等,这些字符需要占用两个字节空间,
  所以c++提出了双字节字符类型 wchar_t (或叫宽字符类型)。
    int 无论在32位还是64位机器中,都是4个字节, 且带符号
	int_t 是通过typedef定义的,t表示typedef,因为跨平台,不同的平台会有不同的字长,所以利用预编译和typedef可以最有效的维护代码
        typedef unsigned int        uint32_t;
        typedef int            int32_t;
        typedef unsigned long int    uint64_t;
        typedef long int        int64_t;
    int64_t和long long都是整型数据类型,它们都可以存储整数值。
	  不过int64_t是一种专门为64位系统设计的数据类型,它的长度固定为64位。相比之下,long long的长度并不是固定的,在不同的编译器和操作系统上可能会有所不同	
	通过typedef定义的,而不是一种新的数据类型
typedef		
 指 typedef 能隐藏笨拙的语法构造以及平台相关的数据类型,从而增强可移植性和以及未来的可维护性
 
使用:
   用途一:定义一种类型易于记忆的别名
   用途三:用typedef来定义与平台无关的类型
     当跨平台时,只要改下 typedef 本身就行,不用对其他源码做任何修改。标准库就广泛地使用这种技巧来创建平台无关类型	   
#define只是简单的字符串替换而typedef则是为一个类型起新名字	
  #define宏定义有一个特别的长处:可以使用 #ifdef ,#ifndef等来进行逻辑判断,还可以使用#undef来取消定义	
  
  
声明-定义-初始化
声明-赋值-初始化

输出

头文件:<locale>
2 
  setlocale(LC_ALL, "chs");  // 设置为中文格式	
  cout 对应char型字符串, wcout对应 wchar_t型字符串
   #include <locale>  // 本地语言设置头文件
   wcout.clear();
   setlocale(LC_ALL, "chs");  // 设置为中文环境

参考

c++在一个cpp文件中调用另一个cpp文件的函数的两种方法	 https://blog.csdn.net/weixin_43350361/article/details/106455331
c++学习之wchar_t字符类型 https://www.cnblogs.com/alex-space/p/13131526.html

标签:typedef,调用,函数,int,数据类型,C++,调用函数,cpp,链接
From: https://www.cnblogs.com/ytwang/p/17880209.html

相关文章

  • Python中级之可变数据类型和不可变数据类型
    【一】可变数据类型对于可变类型(如字典、列表、集合),在函数中修改参数会影响原始对象。当你对于可变类型进行修改操作,并不会返回内容,而是将原本的内容进行了更新#字典(dict)dict1={'a':1,'b':2}dict1.update({'c':2})print(dict1)#{'a':1,'b':2,'c':2}#......
  • C++中的const用法
    一、修饰普通变量:constdoublePI=3.14159;constinta=10;//这些C++中的内置类型被const修饰时,其值不可被随意更改二、修饰一个指针(即指针对应的值不可修改):但是指针作为一个变量,其可指向其他位置,只是无法通过指针来改变其指向的对象的值inta=10;intb=20;constint*p......
  • Python中级之数据类型的内置方法
    常用方法概览#数字类型int():类型强转bin():转换二进制hex():转换十六进制oct():转换八进制int(num,2/8/16)#通过int()为其设置参数可进行机制转换#以下三种判断需在字符串类型下使用.isdigit():判断是否均为整数数字[允许汉语数字].isdecimal():判断是否均为十进制......
  • Qt/C++视频监控拉流显示/各种rtsp/rtmp/http视频流/摄像头采集/视频监控回放/录像存储
    一、前言本视频播放组件陆陆续续写了6年多,一直在持续更新迭代,视频监控行业客户端软件开发首要需求就是拉流显示,比如给定一个rtsp视频流地址,你需要在软件上显示实时画面,其次就是录像保存,再次就是一些周边的处理比如贴OSD,做图片分析等。拉流显示是第一步,如果有跨平台的需求,个人推荐......
  • C++_类实例—指针-内存
    智能指针#g++t.cpp-std=c++11C++11中引入了智能指针的概念,方便管理堆内存智能指针是利用了一种叫做RAII(资源获取即初始化)的技术对普通的指针进行封装,这使得智能指针实质是一个对象,行为表现的却像一个指针包含在头文件<memory>中,shared_ptr、unique_ptr、weak_ptr1......
  • C语言中的基本数据类型及其格式化输出
    C语言中的基本数据类型及其格式化输出基本数据类型从下图可以看出,C语言中的基本数据类型包括了整型(int)、字符型(char)、浮点型(float)和双精度浮点型(double)。在声明变量时,不同数据类型都会分配不同的存储空间,而且还跟操作系统有关。char//有符号字符型,1个字节u......
  • ue5 C++生成Actor时初始化变量
    分三步1.UGameplayStatics::BeginDeferredActorSpawnFromClass预生成actor2.给actor变量赋值3.UGameplayStatics::FinishSpawningActor最终生成actorFStringstrBPFileName="/Game/UltraDynamicSky/SkyMode.SkyMode_C";UClass*pClass=LoadClass<AActor>(thi......
  • Keil(C/C++混编)printf问题
    C++不支持UseMicroLIB,解决Keil的printf问题,现象:Debug下,点击三次run可以运行,烧入芯片独立运行死机#ifdef__cplusplusextern"C"{#endif#defineDEFAULT_HANDLE0x100;/**UARTprototypefunctions*/charUART_read(void){return0;}voidUART_write(char......
  • C++运行期多态和编译期多态(以不同的模板参数调用不同的函数)
    在面向对象C++编程中,多态是OO三大特性之一,这种多态称为运行期多态,也称为动态多态;在泛型编程中,多态基于template(模板)的具现化与函数的重载解析,这种多态在编译期进行,因此称为编译期多态或静态多态。<h1"="">1运行期多态运行期多态的设计思想要归结到类继承体系的设计上去。对......
  • C++11、C++14、C++17、C++20新特性总结(5万字详解)(转载)
    文章目录C++11是什么,C++11标准的由来C++auto类型推导完全攻略auto类型推导的语法和规则auto的高级用法auto的限制auto的应用使用auto定义迭代器auto用于泛型编程C++decltype类型推导完全攻略exp注意事项decltype推导规则decltype的实际应用汇总auto和......