我是靠谱客的博主 聪慧草丛,最近开发中收集的这篇文章主要介绍Linux下C++编写注意事项,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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.csdn.net/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文件不对,可能是错误的软链接,删掉重新建立软链接

最后

以上就是聪慧草丛为你收集整理的Linux下C++编写注意事项的全部内容,希望文章能够帮你解决Linux下C++编写注意事项所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部