Linux下C++编写注意事项

本文详细介绍了在Linux环境下使用C++编程的一些实用技巧,包括如何正确处理模板嵌套、数学函数的使用、文件操作的最佳实践、字符串分割的安全方法、迭代器的获取方式、自定义排序规则、链接库目录的配置等。对于希望提高C++编程效率和代码质量的开发者来说,这些技巧不可或缺。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux下C++代码编辑与编译


1.双重或多重模板嵌套时,">>“需要写成”> >":std::vector<std::vector >
2.计算平方/开方的函数pow()/sqrt(),需要:#include <math.h>
3.ifstream ifs(pthFilePath.string().c_str()); 初始化,在输出结束时,需要:ifs.close();
4.在调用fopen_s()函数打开文件时,这个函数需要#include <stdio.h>,但这个是非标准的函数.不是所有编译器都支持的gcc的C语言及VC++的高版本才支持, 所以用fopen()函数替换:

FILE *fr = NULL;
//fopen_s(&fr, strFileName.c_str(), "r");
fr = fopen(strFileName.c_str(), "r");
fclose(fr);

5.字符串分割函数:strtok()函数为原型,使用该函数进行字符串分割时,会破坏被分解字符串的完整,调用前和调用后的s已经不一样了。第一次分割之后,原字符串str是分割完成之后的第一个字符串,剩余的字符串存储在一个静态变量中,因此多线程同时访问该静态变量时,则会出现错误.
#strtok_s()是windows下的一个分割字符串安全函数,这个函数将剩余的字符串存储在buf变量中,而不是静态变量中,从而保证了安全性
strtok_r()是linux下分割字符串的安全函数,该函数也会破坏带分解字符串的完整性,但是其将剩余的字符串保存在saveptr变量中,保证了安全性
像这种功能不变,函数名有变的情况,通常我们直接用宏的方式重新命名 : https://blog.youkuaiyun.com/benpaobagzb/article/details/50814543

#ifdef WIN32  
#define STR_SPLIT strtok_s
#else  
#define STR_SPLIT strtok_r
#endif

6.获取起始迭代器时,不用std::begin(vecGridRange),而是用vecGridRange.begin();
7.使用sort函数自定义排序规则时,比较函数的形参设置为const &类型

static bool SortDoubleIntPair(const std::pair<double, int>& pair1, const std::pair<double, int>& pair2);

8.未定义的引用:添加链接库目录link_directories(),指定链接库名称target_link_libraries()
9.target_link_libraries()需要在指定生成对象之后
10.link时,无法识别的文件格式,可能是.so文件不对,可能是错误的软链接,删掉重新建立软链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值