小编aug*_*tin的帖子

是否有一个知道缩进的差异工具(补丁)?

我经常使用gnu-utils补丁和差异.使用git,我经常这样做:

git diff
Run Code Online (Sandbox Code Playgroud)

通常简单的更改会创建一个大的补丁,因为唯一改变的是,例如,添加一个if/else循环,内部的所有内容都缩进到右边.

查看这样的补丁可能很麻烦,因为只有逐行手动比较才能指示缩进代码中是否有任何实质性更改.我们可能只谈论几行代码,或者几十个(或更多)嵌套代码.(我知道:这样一个假想的大函数最好分成更小的函数,但这不是重点).

当代码块中的唯一更改是缩进并让开发人员知道多少时,GNU diff/patch是否能够注意到?

有没有其他差异工具以这种方式运作?

编辑:好的,--ignore-space-change但是我们处于这样一种情况:或者我们有一个人类更可读的补丁,或者我们有一个完整的补丁,机器会知道如何阅读.难道我们不能拥有更好的两个世界中更好的差异工具,它可以显示人类空间的变化,同时允许机器完全应用补丁吗?

diff patch

22
推荐指数
1
解决办法
5214
查看次数

是否有一种智能方法可以在编译时知道要链接到的库的名称?(Linux的/ Kubuntu的)

请多多包涵.我真的想知道,因为我对答案感到好奇:

是否有一种智能方法可以在编译时知道要链接到的库的名称?

请允许我举一个例子,说明我的问题的原因.

我是C++新手.我正在学习编译,链接和像boost这样的库.我刚刚发现了boost/filesystem并想尝试一下.遇到麻烦编译后,我使用了以下极简主义代码:


// file boost_example.cpp
 #include "boost/filesystem.hpp"
#include <iostream>

int main() { std::cout<<"Hello"; return 0; }

我试图编译它,但作为一个新手,我犯了一个新手错误:我忘了链接到正确的库!

     g++ boost_example.cpp -o run
Run Code Online (Sandbox Code Playgroud)
确切地说,我遇到了本书这一章中解释的问题.
我知道我已经安装了升级版(我被告知安装它来编译另一个项目).我试图从其他项目的Makefile中复制,但以下不起作用:
     g++ boost_example.cpp -o run -lbooster
     g++ boost_example.cpp -o run -lboost
尝试从代码中的#include行做出有根据的猜测,我尝试了以下无效:
     g++ boost_example.cpp -o run -lboost_filesystem
到那时,我已经开始了疯狂地搜索网页.我讨厌搜索引擎,因为大多数时候,你找不到你正在寻找的东西.我找到了以下内容,但他们没有帮助,只是浪费我的时间:
在kubuntu C++/Boost链接器错误下提升库链接问题

由于我是一名RTFM人,我实际上已经检查了我想要使用的库的官方文档:http://www.boost.org/doc/libs/1_43_0/libs/filesystem/doc/index.htm但是我没有找到任何编译信息.

在某个阶段,我受到启发,检查我在系统上实际安装的内容:

$ locate boost_file
/usr/lib/libboost_filesystem-mt.a
/usr/lib/libboost_filesystem-mt.so
/usr/lib/libboost_filesystem-mt.so.1.38.0
Run Code Online (Sandbox Code Playgroud) 因此,我找到了要链接的库的正确名称.以下工作:
     g++ boost_example.cpp -o run -lboost_filesystem-mt

现在,除了使用(可能)智能猜测工作和搜索网络之外,是否有更智能的方法来查找要链接的库的名称?我永远不会猜到boost_filesystem-mt给出标题的库名"boost/filesystem.hpp".

更糟糕的是:官方网站上没有提到boost_filesystem-mt!(我猜这是依赖于发行/包装).

再一次,在提出问题之前,我总是提出RTFM,我找到了上述书中的这一章,所以我在/ usr/lib /上查看了我在系统上可以找到的内容:

$ ls …

c++ compilation linked-list libraries

18
推荐指数
2
解决办法
4021
查看次数

如何初始化一个以结构为值的地图?

我使用map作为ID - > value的关联数组,其中值是定义对象的结构:

#include <map>

struct category {
        int id;
        std::string name;
};

std::map<int, category> categories;

int main() {
        categories[1] = {1, "First category"};
        categories[2] = {2, "Second category"};

}
Run Code Online (Sandbox Code Playgroud)

上面的代码用g ++编译,但有以下警告:

warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x
Run Code Online (Sandbox Code Playgroud)

我在这里阅读了关于struct初始化的各种问题/答案,但我仍然有点困惑.我有一系列相关问题:

  1. 我可以添加编译器选项-std = c ++ 0x并完成警告,但仍然没有更明智的基础问题.如果我在类别结构中添加方法,事情会不会破裂?

  2. 以更符合C++ 03的方式初始化此POD结构(类别)的最佳方法是什么?

  3. 基本上,我还不确定以某种方式而不是另一种方式做事的后果.这种关联数组(其中关键是对象的ID)的很容易与PHP,我还在学习正确的方法做它在C++.在上面的代码中是否有任何我应该注意的事项?

编辑
下面的问题是相关的,但是当我第一次看到他们,我不明白的答案:
c + +初始化匿名结构
的C++初始化结构与数组作为成员
用C初始化结构++

c++ struct associative-array initialization map

17
推荐指数
3
解决办法
5万
查看次数

C++:使用指针的场景是什么?"好主意"(TM)?

可能重复:
指针的常用用途?

我仍在学习C++的基础知识,但我已经足够了解有用的小程序.

我理解指针的概念,我在教程中看到的例子对我来说很有意义.但是,在实际层面上,作为(前)PHP开发人员,我还不自信在我的程序中实际使用它们.

事实上,到目前为止,我还没有觉得需要使用任何指针.我有我的类和函数,我似乎完全没有使用任何指针(更不用指针指针).我不禁为我的小程序感到有些自豪.

尽管如此,我知道我缺少一个C++最重要的功能,一个双刃:指针和内存管理可能造成破坏,看似随机的崩溃,很难找到错误和安全漏洞......但与此同时,如果使用得当,它们必须允许巧妙而有效的编程.

所以:不要使用指针告诉我我错过了什么.

什么是使用指针必须的好方案?
他们允许你做什么,否则你不能这样做?
它们以哪种方式使您的程序更有效率?

那么指针指针呢?

[编辑:所有各种答案都很有用.SO的一个问题是我们不能"接受"不止一个答案.我经常希望我能.实际上,所有答案的组合有助于更好地理解整体情况.谢谢.]

c++ pointers

16
推荐指数
3
解决办法
2540
查看次数

type(myVar)和(type)myVar有什么区别?

我将在cplusplus.com上完成完整的教程,手动编写和编译每个示例.我经常偶然发现让我感到困惑的事情.

我目前正在学习这一部分:http://www.cplusplus.com/doc/tutorial/structures/.只有阅读教程才能轻易忽略一些细微之处.手动输入所有东西的优点是这些细节确实很突出.

在上面的页面中,有两个示例程序.一个有这条线:

stringstream(mystr) >> yours.year;
Run Code Online (Sandbox Code Playgroud)

另一个有这条线:

(stringstream) mystr >> pmovie->year;
Run Code Online (Sandbox Code Playgroud)

我不明白的是type (myVar) = x;和之间的区别(如果有的话)(type) myVar = x;.

我没有按顺序执行整个教程.我查了但是没有找到这个地址,但我可能错过了它.

  • 有区别吗?
  • 是否有一种首选方式而不是另一种方式?

c++

15
推荐指数
1
解决办法
2574
查看次数

C++:最常见的漏洞是什么以及如何避免它们?

当我编码时,我总是试图保持安全意识.问题是我需要知道要寻找什么以及要防止什么.

是否存在最常见(C++)软件漏洞的某个列表以及如何避免它们?

那些用于特定用途的C++软件,例如Linux控制台软件或Web应用程序?

c++

14
推荐指数
2
解决办法
6825
查看次数

正则表达式:如何找到模式的最大整数值?

想象一下,我有以下字符串:

"I'll have some %1%, some %42% and maybe some %5% as well."
Run Code Online (Sandbox Code Playgroud)

基本上,我有兴趣知道模式%(整数)%之后的最大整数值.

我甚至不确定是否可以使用正则表达式.我可以使用什么正则表达式,以便在上面的例子中答案是42?

PS一个简单的解决方案显然是简单地查找任何%(整数)%模式,并使用脚本(c ++代码)迭代所有匹配并找到最高值.我的问题是:是否可以在正则表达式中立即执行此操作?

背景:理解下面的内容可能没有必要回答这个问题,但我想你们中的一些人可能想知道.

基本上我使用的是C++和boost :: format.格式用这样的占位符构图:%1%,%2%等.如果提供的变量数与格式本身的最大整数值不对应,Boost :: format会抛出异常.我将使用的格式由(受信任的)用户(网站管理员)提供.不过,为了正确地做事,我需要验证模式.因此,我需要在模式中找到最大整数,以确保在运行时不会抛出异常.

如果您使用带有用户提供格式的boost :: format,您是如何处理此问题的?

顺便说一句,没有boost-format标签!(虽然还有其他的boost-foo标签).

解

Billy ONeal提供了正确的答案,Beh Tou Cheh(在所选答案的评论中)非常友好地粘贴了实际的代码:

#include <iostream>
#include <string>
#include <deque>
#include "strtk.hpp"

int main() 
{
   std::string s = "I'll have some %1%, some %42% and maybe some %5% as well.";
   std::deque<int> int_list;
   strtk::split_regex("%([\\d]+)%",
                       s,
                       strtk::range_to_type_back_inserter(int_list),
                       strtk::match_mode::match_1);

   if (!int_list.empty())
   {
        std::cout << "max: " << strtk::max_of_cont(int_list) << std::endl;
   } …
Run Code Online (Sandbox Code Playgroud)

c++ regex format boost

12
推荐指数
1
解决办法
1581
查看次数

C++:"我的文本"是std :: string,*char还是c-string?

我刚刚做了一个看似常见的新手错误:

首先,我们阅读了许多教程之一,如下所示:

 #include <fstream>
 int main() {
      using namespace std;
      ifstream inf("file.txt");
      // (...)
 }  
Run Code Online (Sandbox Code Playgroud)

其次,我们尝试在代码中使用类似的东西,如下所示:

#include <fstream>
int main() {
    using namespace std;
    std::string file = "file.txt"; // Or get the name of the file 
                                   // from a function that returns std::string.
    ifstream inf(file);
    // (...)
}
Run Code Online (Sandbox Code Playgroud)

第三,新手开发人员对一些神秘的编译器错误消息感到困惑.

问题是,ifstream的需要const * char 作为构造函数的参数.

该解决方案是的std :: string为const*字符转换.

现在,真正的问题是,对于一个新手来说,几乎所有教程中给出的"file.txt"或类似的例子看起来都像std :: string.

那么,"我的文本"是std :: string,c-string还是*char,还是取决于上下文?

您能否举例说明"我的文本"将如何根据上下文进行不同的解释?

[编辑:我认为上面的例子会让它显而易见,但我应该更明确一点:我的意思是双引号中包含的任何字符串的类型,即"myfilename.txt",而不是单词的含义'串'.]

谢谢.

c++ string char

9
推荐指数
2
解决办法
3640
查看次数

我在哪里可以找到C++ csound教程?

我刚刚发现了csound并安装了它的C++绑定.

此处记录了API(在Linux上进行常规安装后):

/usr/share/doc/libcsound64-doc/html/index.html  
Run Code Online (Sandbox Code Playgroud)

但是,我缺少的是一个很好的教程,让我开始使用API​​.

c++ audio csound

9
推荐指数
1
解决办法
1712
查看次数

我在哪里可以学习如何使C++程序与操作系统(Linux)交互

我是C++初学者.

我想创建与操作系统交互的小程序(使用Kubuntu Linux).到目前为止,我还没有找到任何教程或手册来让C++与操作系统接口.

在PHP中,我可以使用命令exec()或反引号运算符来启动通常在控制台中执行的命令.我怎样才能在C++中做类似的事情?如何让我的C++程序执行任何其他命令?如何获得这些命令的输出?

谢谢.

c++ linux operating-system

7
推荐指数
2
解决办法
2085
查看次数