std::flush就在std::endl我正在查看遗留代码的所有内容之后.当我第一次看到这个,我的想法是这是在看的描述冗余std::endl和std::flush在:
http://en.cppreference.com/w/cpp/io/manip/endl
http://en.cppreference.com/w/cpp/io/manip/flush
以下是我在遗留源代码中看到的示例:
std::cout << "Generic Notification" << std::endl << std::flush;
Run Code Online (Sandbox Code Playgroud)
但是,由于许多高级软件开发人员多年来都看过这个代码,我想知道是否有一些我遗漏的细节.有没有任何目的有一个std::flush后std::endl?
我已经搜索了一段时间,但没有找到一个好的答案。(我目前正在与GHS支持人员讨论此事,但想在这里发布以查看是否有人对此有任何经验。在与GHS进行更多交谈之后,我将发布更新。)
我正在使用Green Hills Software MULTI IDE和编译器开发嵌入式应用程序。这是一个C ++项目。我试图移植现有的.gpj项目以在Eclipse中使用,以便可以利用Eclipse CDT中的开发工具。有没有人有这样做的经验并且可以提供提示?
我当然想在Eclipse中进行开发,并且仍然使用GHS编译器以及当前.gpj文件中的所有选项进行编译。目前,我只打开了两个应用程序,并在一个单独的Eclipse项目中开发了源代码,然后使用当前的.gpj项目在MULTI项目管理器中进行编译。
这里对此进行了简要讨论,但未提供解决方案:https : //www.eclipse.org/forums/index.php/t/210115/
编辑:我愿意接受在MULTI Project Manager中使用现代编辑器的任何建议(不必是Eclipse CDT)。所需的主要开发工具是自动完成现有变量并转到类和变量的定义。
所以昨天我一直在寻找SO而无法找到以下答案.这种情况来自我正在使用的一些代码,但这是MCVE来演示它.
我在A中定义了一个A类,其中只有一个静态const.我已经在标题中初始化了它.
#ifndef A_H_
#define A_H_
class A {
public:
static const int test = 5;
~A(){};
};
#endif /* A_H_ */
Run Code Online (Sandbox Code Playgroud)
然后我有一个类B需要从类A访问公共静态const.在这个例子中,它会将值深度复制到向量.
#ifndef B_H_
#define B_H_
#include "A.h"
#include <vector>
#include <iostream>
class B {
private:
std::vector<int> testVec;
public:
B(){
testVec.push_back((const int)A::test);
//testVec.push_back(static_cast<const int>(A::test)); //Also works
//testVec.push_back(A::test); //Doesn't work without forward declaration of const int A::test in main or in this header
//(Compiler link error: undefined reference to `A::test')
std::cout<< testVec.front() << std::endl;
}
~B(){};
};
#endif /* B_H_ …Run Code Online (Sandbox Code Playgroud) 在我们公司的编码标准中禁止使用普通的旧 strcpy,因为它可能会导致缓冲区溢出。我正在寻找我们在代码中链接的某些 3rd Party Library 的来源。库源代码使用 strcpy 是这样的:
for (int i = 0; i < newArgc; i++)
{
newArgv[i] = new char[strlen(argv[i]) + 1];
strcpy(newArgv[i], argv[i]);
}
Run Code Online (Sandbox Code Playgroud)
由于在为要复制到的缓冲区分配内存时使用了 strlen,因此看起来不错。有没有可能有人可以利用这个正常的 strcpy ,或者这是否像我认为的那样安全?
我已经看到了导致缓冲区溢出情况的 strcpy 的幼稚使用,但这似乎没有,因为它总是使用 strlen 为缓冲区分配适量的空间,然后使用 argv[] 作为复制到该缓冲区源应始终为空终止。
老实说,我很好奇使用调试器运行此代码的人是否可以利用此功能,或者是否有任何其他策略试图破解我们的二进制文件(使用我们在其编译版本中链接的这个库源)可以用来利用此用途的strcpy。感谢您的投入和专业知识。