建设部职业资格注册中心网站做pc网站
news/
2025/10/5 0:19:26/
文章来源:
建设部职业资格注册中心网站,做pc网站,drupal和WordPress性能,最早的软件开发模型主要整理了N多年前#xff08;2010年#xff09;学习C的时候开始总结的知识点#xff0c;好长时间不写C代码了#xff0c;现在LLM量化和推理需要重新学习C编程#xff0c;看来出来混迟早要还的。
1.const_cast new_type (expression)[1] 解析#xff1a;const_c… 主要整理了N多年前2010年学习C的时候开始总结的知识点好长时间不写C代码了现在LLM量化和推理需要重新学习C编程看来出来混迟早要还的。
1.const_cast new_type (expression)[1] 解析const_cast转换符用来移除变量的const或volatile限定符。如下所示 1常量指针被转化成非常量指针并且仍然指向原来的对象。比如const A *pca1 new A; A *pa2 const_castA*(pca1); 2常量引用被转换成非常量引用并且仍然指向原来的对象。比如const A a1 a0; A a2 const_castA(a1); 3常量对象被转换成非常量对象错误。 比如const A ca; A a const_castA(ca);错误 4添加const属性。比如const int *k const_castconst int*(j);和const int *m j; 说明使用const_cast去掉const属性其实并不是真的改变原类类型或基本类型的const属性它只是又提供了一个接口指针或引用可以通过这个接口来改变类型的值。使用const_case添加const属性也是提供了一个接口来不让修改其值。
2.VS 2013和Boost 1.6.2[2] 解析 1附加包含目录D:\boost_1_62_0 2附加库目录D:\boost_1_62_0\stage\lib 在VS 2013工程中添加C/C工程中外部头文件及库的基本步骤如下所示[4] 1添加工程的头文件目录工程 -- 属性 -- 配置属性 -- C/C -- 常规 -- 附加包含目录加上头文件存放目录。 2添加文件引用的lib静态库路径工程 -- 属性 -- 配置属性 -- 链接器 -- 常规 -- 附加库目录加上lib文件存放目录。 3添加工程引用的lib文件名工程 -- 属性 -- 配置属性 -- 链接器 -- 输入 -- 附加依赖项加上lib文件名。 4添加工程引用的dll动态库把引用的dll放到工程的可执行文件所在的目录下。 说明b2.exe、bjam.exe这两个exe的作用是一样的只不过bjam.exe是老版本b2是bjam的升级版本。
3.VS 2013和Boost.Python [3][5] 解析Boost::Python库是Python和C相互交互的框架它是对Python/C API的包装可以在Python中调用C的类和方法也可以让C调用Python的类和方法。Python是一个动态类型的语言C是一个静态类型的语言对于Python中的变量类型Boost.Python都有相应的类对应。 1编译Boost.Python 执行命令bjam --with-python linkshared runtime-linkshared address-model64在目录D:\boost_1_62_0\stage\lib下面生成boost_python-vc120-mt-1_62.dllboost_python-vc120-mt-1_62.libboost_python-vc120-mt-gd-1_62.dllboost_python-vc120-mt-gd-1_62.lib四个文件。如果报错fatal error C1001:编译器中发生内部错误那么将VS 2013升级到VS 2013 Update 5。[7] 2使用VS 2013生成dll文件 使用VS 2013新建一个Win32 DLL项目然后设置项目属性包含目录D:\boost_1_62_0D:\boost_1_62_0\libsD:\Program Files\Anaconda2\include库目录D:\boost_1_62_0\stage\libD:\Program Files\Anaconda2\libs并且不启用最小重新生成不使用预编译头。 3Python调用C 将生成的dll文件改为pyd文件并将boost_python-vc120-mt-gd-1_62.dll和pyd文件复制到Python项目的根目录。[8][9] 说明通过Boost.Python模块也是对Python/C API的封装C可为Python编写扩展模块。通过Python/C APIPython可为C提供脚本接口。[10]
4.chrono、ratio和ctime等头文件 [6] 解析 1#include 日期和时间。 2#include 日期和时间。 3#include 比例关系。 4#include 运行时类型信息RTTI。
5.两种遍历host_vector方式 解析 1常规方式
for (int i 0; i h_vec.size(); i) {cout h_vec[i] endl;
}2迭代器方式
for (host_vectorint::iterator i h_vec.begin(); i ! h_vec.end(); i)
{cout *i endl;
}6.volatile关键字 解析volatile关键字确保本条指令不会因编译器的优化而省略而且要求每次直接读值。
7.extern “C” 解析extern C的主要作用是为了能够正确实现C代码调用其它C语言代码。加上extern C后会指示编译器这部分代码按C语言的进行编译而不是C的。由于C支持函数重载因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中而不仅仅是函数名而C语言并不支持函数重载因此编译C语言代码的函数时不会带上函数的参数类型一般只包括函数名。
8.C 11中auto功能[11] 解析自动类型推断返回值占位。
9.assert宏 解析assert()是宏而不是函数。在C的#includeassert.h头文件中其作用是如果它的条件返回错误则终止程序执行。如下所示
#include stdio.h
#include assert.h void print_number(int* myInt) {assert(myInt ! NULL);printf(%d\n, *myInt);
}int main()
{int a 10;int * b NULL;int * c NULL;b a;print_number(b);print_number(c);return 0;
}10.inline关键字 解析关键字inline必须与函数定义体放在一起才能使函数成为内联函数仅将inline放在函数声明前面不起任何作用。不宜使用内联函数如下所示 1如果函数体内的代码比较长使用内联将导致内存消耗代价较高。 2如果函数体内出现循环那么执行函数体内代码的时间要比函数调用的开销大。
11.exit()函数 解析exit(1)是异常退出exit(0)是正常退出。
12.C三法则 解析如果类定义下列其中一个函数那么也需要其它两个函数如下所示 1析构函数Destructor 2复制构造函数copy constructor 3复制赋值运算符copy assignment operator
13.POD类型 解析POD是Plain Old Data的缩写它是一个struct或者类且不包含构造函数、析构函数以及虚函数。
14.虚函数纯虚函数虚基类与虚继承 解析 1虚函数定义一个函数为虚函数不代表函数为不被实现的函数。定义它为虚函数是为了允许用基类的指针来调用子类的这个函数。 2纯虚函数定义一个函数为纯虚函数才代表函数没有被实现。定义纯虚函数是为了实现一个接口起到一个规范的作用规范继承这个类的程序员必须实现这个函数。
15.std::shared_ptr 解析std::shared_ptr定义于头文件 中template class T class shared_ptr; std::shared_ptr是通过指针保持某个对象的共享拥有权的智能指针。若干个shared_ptr对象可以拥有同一个对象最后一个指向该对象的shared_ptr被销毁或重置时该对象被销毁。销毁该对象时使用的是delete表达式或者是在构造shared_ptr时传入的自定义删除器deleter。shared_ptr也可以不拥有对象称作空empty。shared_ptr满足CopyConstructible和CopyAssignable的要求。
16.explicit specifier 解析在大部分情况中隐式转换却容易导致错误不是语法错误编译器不会报错。通过将构造函数声明为explicit显式的方式可以抑制隐式转换也就是explicit构造函数必须显式调用。如下所示
struct A {A ( int ) {}operator int() const { return 0; }
};struct B {explicit B(int) {}explicit operator int() const { return 0; }
};int main() {// A is has no explicit ctor / conversion, everything is fineA a1 1;A a2 ( 2 );A a3 { 3 };int na1 a1;int na2 static_castint( a1 );B b1 1; // Error: implicit conversion from int to BB b2 ( 2 ); // OK: explicit constructor callB b3 { 3 }; // OK: explicit constructor callint nb1 b2; // Error: implicit conversion from B to intint nb2 static_castint( b2 ); // OK: explicit cast
}说明explicit class_name ( params )explicit operator type () (C11起)。
17.boost::mutex 解析Boost线程库提供了6种互斥体类型boost::mutexboost::try_mutexboost::timed_mutexboost::recursive_mutexboost::recursive_try_mutexboost::recursive_timed_mutex。boost库中提供了mutex类与lock类通过组合可以轻易的构建读写锁与互斥锁。如下所示 1mutex对象类mutex类主要有两种boost::mutexboost::shared_mutex其中mutex有lock和unlock方法shared_mutex除了提供lock和unlock方法外还有shared_lock和shared_unlock方法。因此boost::mutex为独占互斥类boost::shared_mutex为共享互斥类。 2lock模板类boost::unique_lockboost::shared_lock其中unique_lock为独占锁shared_lock为共享锁。unique_lock中的T可为mutex类中的任意一种如果为shared_mutex那么boost::unique_lock类的对象构造函数构造时会自动调用shared_mutex的shared_lock方法析构函数里会自动调用shared_mutex的shared_unlock方法。如果boost:: unique_lock则分别自动调用lock和unlock方法。boost::shared_lock中的T只能是shared_mutex类。
18.NMake Makefiles与MinGW Makefiles区别 解析-G “MinGW Makefiles这个参数的意思是生成MinGW的Makefile最终生成的编译目标Makefile是针对MinGW编译器的。如果编译器是VS那么使用NMake Makefiles”。
19.Boost并发编程[12] 解析 1Interprocess (IPC)库用于实现共享内存、内存映射的 I/O 和消息队列 2Thread库用于实现可移植的多线程 3Message Passing Interface (MPI)库用于分布式计算中的消息传递 4Asio库用于使用套接字和其它低层功能实现可移植的连网功能。
20.CMake常用命令 解析 1set(Foo a b c)设置变量Foo。 2add_exectuable告诉工程生成一个可执行文件。 3add_library告诉工程生成一个库文件。 4include_directories头文件路径。 5link_directories库文件路径。 6find_package(XXX)调用FindXXX.cmake模块。 7add_definitions添加编译参数。 8target_link_libraries添加链接库。 9CMAKE_BUILD_TYPESET(CMAKE_BUILD_TYPE Debug|Release)。 10编译器参数CMAKE_C_FLAGSCMAKE_CXX_FLAGS。 11_FOUND如果找到了name被设置为1否则不设置。 12_INCLUDE_DIRS被设置成name安装头文件和依赖头文件的目录。 13_LIBRARIES被设置成所建立和安装的name库的文件名。 14_LIBRARY_DIRS被设置成name库的第三方依赖文件所在的目录。 15_VERSION所找到的name的版本。 16_COMPONENTS列出所有可用组件。 17_DEFINITIONS列出所需要的预处理器定义和编译器标志。 18获得一个目录下所有源文件不包含头文件aux_source_directory(dir variable)。 19设定依赖的cmake版本cmake_minimum_required(VERSION 2.6)。 20${projectname_SOURCE_DIR}表示根源文件目录。 21${projectname _BINARY_DIR}表示根二进制文件目录。 22打印make输出make VERBOSE1。 23add_compile_options添加的编译选项是针对所有编译器的。 24executable_output_path指定可执行文件存放的路径。 25library_output_path指定库文件存放的路径。 26cmake_current_source_dir指的是当前处理的CMakeLists.txt所在的路径。 27cmake_current_binary_dir如果是out-of-source编译指的是target编译目录。 28cmake_current_list_file输出调用这个变量的CMakeLists.txt完整路径。 29cmake_current_list_line输出这个变量所在的行。 30cmake_module_path定义cmake模块所在的路径。 31cmake调用环境变量使用$ENV{NAME}指令调用系统环境变量。 32UNIX在所有的类UNIX平台为TRUE包括OS X和cygwin。 33WIN32在所有的win32平台为TRUE包括cygwin。 34build_shared_libs控制默认的库编译方式。
21.#include 解析io代表输入输出manip是manipulator[操纵器]的缩写。它是I/O流控制头文件就像C里面的格式化输出一样。
22.#define WIN32_LEAN_AND_MEAN 解析包含windows.h时去除一些头文件的包含加快编译速度。
23.#define NOMINMAX 解析为了禁用Visual C中的min/max宏定义可以在包含windows.h头文件之前加上#define NOMINMAX。
24.标准库bitset对象上的操作 解析 [1]b.any()b中是否存在置为1的二进制位。 [2]b.none()b中不存在置为1的二进制位。 [3]b.count()b中置为1的二进制位的个数。 [4]b.size()b中二进制位的个数。 [5]b[pos]访问b中在pos处的二进制位。 [6]b.test(pos)b中在pos处的二进制位是否为1。 [7]b.set()把b中所有二进制位都置为1。 [8]b.set(pos)把b中在pos处的二进制位置为1。 [9]b.reset()把b中所有二进制位都置为0。 [10]b.reset(pos)把b中在pos处的二进制位置为0。 [11]b.flip()把b中所有二进制位逐位取反。 [12]b.flip(pos)把b中在pos处的二进制位取反。 [13]b.to_ulong把b中同样的二进制位返回一个unsigned long值。 [14]os b把b中的位集输出到os流。
25.GCC参数 解析
[1]static编译静态库。
[2]shared编译动态库。
[3]w不生成任何警告信息。
[4]Wall生成所有警告信息。
[5]-l [小写l]指定要链接的库。
[6]-I [大写i]指定头文件目录。
[7]-L [大写l]指定库目录。 26.Binutils 解析GNU Binutils [Binary Utilities]即GNU二进制工具集。
27.itoa函数[#include stdlib.h] 解析函数原型char *itoa( int value, char *string, int radix);把一个整数转换为字符串如下所示 [1]value欲转换的数据。 [2]string目标字符串的地址。 [3]radix转换后的进制数比如16进制等。 相关函数如下所示 [1]char *ultoa(unsigned long value, char *string, int radix) 将无符号整型数value转换成字符串并返回该字符串。 [2]char *ltoa(long value, char *string, int radix) 将长整型数value转换成字符串并返回该字符串。 [3]char *itoa(int value, char *string, int radix)将整数value转换成字串存入stringradix为转换时所用基数。 [4]double atof(char *nptr) 将字符串nptr转换成双精度数并返回这个数错误返回0。 [5]int atoi(char *nptr) 将字符串nptr转换成整型数并返回这个数错误返回0。 [6]long atol(char *nptr) 将字符串nptr转换成长整型数并返回这个数错误返回0。 [7]double strtod(char *str, char **endptr) 将字符串str转换成双精度数并返回这个数。 [8]long strtol(char *str, char **endptr, int base) 将字符串str转换成长整型数并返回这个数。
28.Tcl/Tk脚本语言 解析Tcl是工具控制语言[Tool Control Language]的缩写。Tk是Tcl图形工具箱的扩展它提供各种标准的GUI接口项以利于迅速进行高级应用程序开发。
29.LLVM 解析LLVM是构架编译器[compiler]的框架系统以C编写而成用于优化以任意程序语言编写的程序的编译时间[compile-time]、链接时间[link-time]、运行时间[run-time]以及空闲时间[idle-time]对开发者保持开放并兼容已有脚本。
30.CC编译器 解析在Linux下cc通常是一个符号连接指向gcc。
31.CMake安装 解析 [1]sudo apt-get install cmake [2]sudo apt-get install cmake-qt-gui [3]使用命令cmake-gui在终端打开界面
32.静态成员函数 解析静态成员函数没有this指针只能访问静态成员数据、其它静态成员函数和类外部的其它函数。
33.C继承类型 解析 [1]公有继承[public]当一个类派生自公有基类时基类的公有成员也是派生类的公有成员基类的保护成员也是派生类的保护成员基类的私有成员不能直接被派生类访问但是可以通过调用基类的公有和保护成员来访问。 [2]保护继承[protected] 当一个类派生自保护基类时基类的公有和保护成员将成为派生类的保护成员。 [3]私有继承[private]当一个类派生自私有基类时基类的公有和保护成员将成为派生类的私有成员。
34.可重载运算符 解析 [1]双目算术运算符 (加)-(减)(乘)/(除)% (取模) [2]关系运算符(等于)! (不等于) (小于) (大于(小于等于)(大于等于) [3]逻辑运算符||(逻辑或)(逻辑与)!(逻辑非) [4]单目运算符 (正)-(负)(指针)(取地址) [5]自增自减运算符(自增)–(自减) [6]位运算符| (按位或) (按位与)~(按位取反)^(按位异或), (左移)(右移) [7]赋值运算符, , -, *, / , % , , |, ^, , [8]空间申请与释放new, delete, new[] , delete[] [9]其它运算符()(函数调用)-(成员访问),(逗号)
35.不可重载运算符 解析 [1].成员访问运算符 [2].和-成员指针访问运算符 [3]::域运算符 [4]sizeof长度运算符 [5]?:条件运算符 [6]#预处理符号 说明运算重载符不可以改变语法结构不可以改变操作数的个数不可以改变优先级不可以改变结合性。
36.虚函数 解析虚函数是在基类中使用关键字virtual声明的函数。在派生类中重新定义基类中定义的虚函数时会告诉编译器不要静态链接到该函数。在程序中任意点可以根据所调用的对象类型来选择调用的函数这种操作被称为动态链接或后期绑定。
37.纯虚函数 解析virtual int area() 0;其中0告诉编译器函数没有主体上面的虚函数是纯虚函数。
38.使用CLion进行Boost编程 解析 [1]./booststrap.sh [2]sudo ./b2 install 说明编译好的头文件位于/usr/local/include/boost库路径位于/usr/local/lib。
39.ADD_EXECUTABLE(CRNode ${SRC_LIST}) 解析定义了这个工程会生成一个文件名为CRNode的可执行文件,相关的源文件是SRC_LIST中定义的源文件列表。需要注意的是这里的CRNode和之前的项目名称没有任何关系可以任意定义。
40.TARGET_LINK_LIBRARIES(CRNode log4cpp thrift) 解析在指定链接目标文件的时候需要链接的外部库其效果类似gcc的编译参数-l可以解决外部库的依赖问题。
41.C类库 解析
[1]cassert (assert.h)C Diagnostics Library (header)
[2]cctype (ctype.h)Character handling functions (header)
[3]cerrno (errno.h)C Errors (header)
[4]cfenv (fenv.h)Floating-point environment (header)
[5]cfloat (float.h)Characteristics of floating-point types (header)
[6]cinttypes (inttypes.h)C integer types (header)
[7]ciso646 (iso646.h)ISO 646 Alternative operator spellings (header)
[8]climits (limits.h)Sizes of integral types (header)
[9]clocale (locale.h)C localization library (header)
[10]cmath (math.h)C numerics library (header)
[11]csetjmp (setjmp.h)Non local jumps (header)
[12]csignal (signal.h)C library to handle signals (header)
[13]cstdarg (stdarg.h)Variable arguments handling (header)
[14]cstdbool (stdbool.h)Boolean type (header)
[15]cstddef (stddef.h)C Standard definitions (header)
[16]cstdint (stdint.h)Integer types (header)
[17]cstdio (stdio.h)C library to perform Input/Output operations (header)
[18]cstdlib (stdlib.h)C Standard General Utilities Library (header)
[19]cstring (string.h)C Strings (header)
[20]ctgmath (tgmath.h)Type-generic math (header)
[21]ctime (time.h)C Time Library (header)
[22]cuchar (uchar.h)Unicode characters (header)
[23]cwchar (wchar.h)Wide characters (header)
[24]cwctype (wctype.h)Wide character type (header)42.C容器类库 解析
[1]arrayArray header (header)
[2]bitsetBitset header (header)
[3]dequeDeque header (header)
[4]forward_listForward list (header)
[5]listList header (header)
[6]mapMap header (header)
[7]queueQueue header (header)
[8]setSet header (header)
[9]stackStack header (header)
[10]unordered_mapUnordered map header (header)
[11]unordered_setUnordered set header (header)
[12]vectorVector header (header)43.C输入/输出流类库 解析
44.Atomics and threading library 解析
[1]atomicAtomic (header)
[2]condition_variableCondition variable (header)
[3]futureFuture (header)
[4]mutexMutex (header)
[5]threadThread (header)45.Miscellaneous headers 解析
[1]algorithmStandard Template Library: Algorithms (library )
[2]chronoTime library (header)
[3]codecvtUnicode conversion facets (header)
[4]complexComplex numbers library (header)
[5]exceptionStandard exceptions (header)
[6]functionalFunction objects (header)
[7]initializer_listInitializer list (header)
[8]iteratorIterator definitions (header)
[9]limitsNumeric limits (header)
[10]localeLocalization library (header)
[11]memoryMemory elements (header)
[12]newDynamic memory (header)
[13]numericGeneralized numeric operations (header)
[14]randomRandom (header)
[15]ratioRatio header (header)
[16]regexRegular Expressions (header)
[17]stdexceptException classes (header)
[18]stringStrings (header)
[19]system_errorSystem errors (header)
[20]tupleTuple library (header)
[21]typeindexType index (header)
[22]typeinfoType information (header)
[23]type_traitstype_traits (header)
[24]utilityUtility components (header)
[25]valarrayLibrary for arrays of numeric values (header)46.mallocfreecallocrealloc用法 解析 [1]void* malloc(size_t size);该函数与类型无关向内存申请一块连续可用的空间并返回指向这块空间的指针。 [2]void free (void *ptr);指针指向申请出来的起始地址。 [3]void *calloc (size_t num,size_t size);用来动态分配内存。 [4]void realloc(void ptr,size_t size );对动态开辟内存大小的调整。
47.chrono库 解析chrono库主要包含了三种类型时间间隔Duration、时钟Clocks和时间点Timepoint。
48.C auto原理 解析auto的原理就是根据后面的值来自己推测前面的类型是什么。
49.MinGW 解析MinGW是让Windows用户可以用上GNU工具。
50.Cygwin 解析Cygwin提供完整的类Unix环境。
参考文献 [1]C类型转换详解const_casthttp://blog.csdn.net/lwbeyond/article/details/6213382 [2]在VS2013中安装配置boost_1_58_0库http://blog.csdn.net/a249900679/article/details/50961852 [3]Boost.Python初级教程http://blog.csdn.net/lainegates/article/details/8008414 [4]VC包含目录、附加依赖项、库目录及具体设置http://www.cnblogs.com/MuyouSome/p/3380134.html [5]Boost.Pythonhttp://www.boost.org/doc/libs/1_62_0/libs/python/doc/html/index.html [6]C的chrono、ratio和ctime等头文件http://lib.csdn.net/article/operatingsystem/19036 [7]Boost安装出错遇到“编译器中发生内部错误”的解决方法http://blog.csdn.net/alpine_climbing/article/details/52621528 [8]VS2013 Python Boost.Python实现Python调用C方法http://evanstone.blog.51cto.com/9615170/1583366 [9]基于VS2015 X64的Boost.Python环境搭建http://m.blog.csdn.net/article/details?id52014741 [10]Python/C API Reference Manualhttps://docs.python.org/2.7/c-api/index.html [11]C11新特性auto的使用http://blog.csdn.net/huang_xw/article/details/8760403 [12]使用Boost库进行并发编程http://www.ibm.com/developerworks/cn/aix/library/au-concurrent_boost/ [13] #define NOMINMAXhttp://blog.163.com/fleeting_ash/blog/static/663410862009310113424930/ [14] 编译器cc、gcc、g、CC的区别https://www.cnblogs.com/52php/p/5681725.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/927717.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!