小编Tho*_*ews的帖子

用于更改C++类名的脚本

我已将类从全局命名空间移动到特定命名空间.我也改变了班级名称.我想将使用这些类的所有源文件转换为新格式.我正在考虑bash使用sedCygwin上的文件或执行perl脚本的脚本.我在bash剧本上遇到了麻烦.

这是我正在尝试执行的过程:

  1. 对于每个源文件,*.cpp和*.hpp,递归:
  2. 如果文件包含旧类名,则转换该文件.
  3. 结束.

我在Bash脚本中的问题是检测文件是否包含旧的类名.我在想grep每个类名的一个陈述:

for f in `find . -iname \*.[ch]pp`;
do
  if [ grep "Field_Blob_Medium" $f -eq 0 || grep "Field_Boolean" ]; then
      sed -f conversion.sed $f
  fi
done
Run Code Online (Sandbox Code Playgroud)

问题是Bashif语句中只有一个命令可以使用以下语法:

if grep "Field_Unsigned_Short" $f;
Run Code Online (Sandbox Code Playgroud)

所以我不能对greps 进行逻辑运算.

我可以执行嵌套循环,但我不知道如何break摆脱Bashfor循环:

OLD_CLASS_NAMES="Field_Blob_Medium Field_Boolean Field_Unsigned_Int"
for f in `find . -iname \*.[ch]pp`;
do
  for c_name in $OLD_CLASS_NAMES;
  do
     if grep $c_name $f then
        sed …
Run Code Online (Sandbox Code Playgroud)

c++ bash perl cygwin sed

6
推荐指数
1
解决办法
482
查看次数

C++中的变量究竟是什么?

标准说

变量由对象的声明引入.变量的名称表示对象.

但这个定义究竟意味着什么呢?

变量是否为对象赋予名称,即变量只是其他匿名对象的命名机制?或者是名称本身的变量?

或者,变量是一个命名对象,因为每个变量也是一个对象?

或者是一个变量只是一个"代理",其名称将所有操作"委托"给真实对象?

为了进一步混淆,许多C++书籍似乎将变量和对象视为同义词.

你对此有什么看法?


关于实体,引用C++ 0x草案:

实体是价值,对象,参考,功能[...]

表示实体的每个名称都由声明引入.

变量由对象的声明引入

从这些陈述中我得出结论,变量是名称,因此不能是对象.这真让我感到困惑:)

c++ variables object

6
推荐指数
1
解决办法
483
查看次数

C中的智能指针实现

可能重复:
C的智能指针/安全内存管理?

我有一个嵌入式应用程序,我在动态内存中分配一个对象并将其传递给其他模块.

我想创建一个指向这个对象的智能指针.C++中有许多用于使用和实现智能指针的示例.

我正在寻找一个只有C语言的智能指针实现.

谢谢.

c pointers smart-pointers c99

6
推荐指数
1
解决办法
4073
查看次数

NULL参数对strstr的行为是什么?

将NULL作为参数传递时的行为是strstr什么?

鉴于:

char * p = NULL;
char * s = NULL;
Run Code Online (Sandbox Code Playgroud)

情况1: strstr(p, "Hello");

案例2: strstr("With my dog", p);

案例3: strstr(p, s);

我的理解是行为未定义,并留给所有3个案例的实施.

根据Microsoft Visual Studio文档,他们执行参数验证并在那里处理它. 请参阅备注部分.

我们在IAR Workbench上使用C99.

背景:一些测试人员正在编写单元测试并为字符串变量分配NULL.

c strstr language-lawyer

6
推荐指数
1
解决办法
6958
查看次数

C++忽略构造函数异常的分支

我搜索了SO的答案,但没有找到答案.

当一个对象在构造函数的末尾抛出一个异常时,该对象是有效的还是这个'取决于构造技术'?

例:

    struct Fraction
    {
      int m_numerator;
      int m_denominator;
      Fraction (double value,
                int denominator);
    };
    Fraction::Fraction(double value, int denominator)
    :  m_numerator(0), m_denominator(denominator)
    {
      if (denominator == 0)
      {
/* E1 */        throw std::logic_error("Denominator is zero.");
      }
      m_numerator = static_cast<int>(value * static_cast<double>(denominator));
      double actual_value = 0.0;
      actual_value = static_cast<double>(m_numerator) / static_cast<double>(m_denominator);
      double error = fabs(actual_value - value);
      if (error > 5.0E-5)
      {
/* E2 */  throw std::logic_error("Can't represent value in exact fraction with given denominator");
      }
    }
Run Code Online (Sandbox Code Playgroud)

该程序:

int main(void) …
Run Code Online (Sandbox Code Playgroud)

c++ constructor exception-handling exception

5
推荐指数
2
解决办法
497
查看次数

如何将__DATE__和__TIME__宏拆分为用于变量声明的单个组件?

我具有以下结构(在嵌入式系统上):

struct Calib_Time_struct
{
    uint16_t    year;
    uint16_t    month;
    uint16_t    day;
    uint16_t    hour;
    uint16_t    minute;
    uint16_t    seconds;
};
Run Code Online (Sandbox Code Playgroud)

我有一个“默认”值数组,需要在其中插入时间值:

struct Calib_Table_struct
{
    unsigned int                    table_id;           //!< Table identifier.
    char                            group_name[CAL_TBL_MAX_GROUP_NAME_LENGTH];
    unsigned int                    channel_number;     //!< Channel number within the group.
    float                           floor_value;        //!< Minimum value for a channel.
    unsigned int                    size;               //!< Number of elements in the table.
    struct Calib_Time_struct    modification_date;  //!< Date of modification.
};
static const struct Calib_Time_struct default_values[] =
{
    // Table 0
    {
        .table_id = 0U,
        .group_name = …
Run Code Online (Sandbox Code Playgroud)

c c++ macros date c-preprocessor

5
推荐指数
1
解决办法
947
查看次数

在CppUnit中指定测试依赖项?

我想在CppUnit中指定测试顺序.根据我的研究,测试顺序取决于编译器或链接器以及它们如何遇到文件.

如何在CppUnit中指定依赖项?

例如,让我们考虑一个有四行的矩形类.每行包含两个点类.假设每个类都在一个单独的模块或翻译单元中.

struct Point
{
  int x;
  int y;
};

struct Line
{
  Point a;
  Point b;
};

struct Rectangle
{
  Line top;
  Line left;
  Line right;
  Line bottom;
};
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,应首先测试Point类,然后测试Line类,最后测试Rectangle类.如果Line或Point类有问题,没有理由测试Rectangle类. 这是一个非常简单的例子.

对于复合类,应首先测试内部类或成员数据类型类.

我们假设每个类都有一个相关的测试类.每个测试类都有自己发布的测试方法(已注册到CppUnit列表),位于单独的文件中.测试行的类不知道点的测试类; 和矩形类似.编译这些测试用例类时,它们的顺序取决于编译器和链接器.

那么,如何订购测试用例?

仅供参考,我使用的是CppUnit,wxTestRunner和Visual Studio 2008

c++ wxwidgets cppunit visual-studio-2008

4
推荐指数
1
解决办法
1653
查看次数

部署到Program Files目录

我开发了一个C#应用程序,我想将它部署到该C:\Program Files\Company Name\Product文件夹.我没有看到在目标计算机上创建的"公司名称"文件夹.

我将文件从"已发布"目录复制到记忆棒(拇指驱动器)上.我将记忆棒带到Windows NT机器并双击setup.exe.应用程序已安装,因为它出现在*开始菜单中.我不知道实际目的地在哪里.我知道它不在C:\Program Files\Company Name\Product文件夹中.

我使用的是MS Visual C#2008 Express Edition版本3.5 SP1.本产品使用严格限制的ClickOnce安装程序.不幸的是,这是我给予的工作.

如何告诉C#express将我的应用程序部署到该C:\Program Files\Company Name\Product文件夹中?

很抱歉,如果这是重复的,因为我很难搜索有关此问题的任何信息.

注意:我正在64位Windows 7平台上开发.

编辑:
我在"程序集信息"对话框中填写了标题,公司,产品,版权,版本和GUID字段.公司名称是两个单词之间的空格.这个空间会造成问题吗?

c# deployment clickonce publishing visual-c#-express-2010

4
推荐指数
1
解决办法
9089
查看次数

printf的格式化缓冲区在哪里?

我在一个受限制的嵌入式系统上工作.

目前我们使用snprintf缓冲区,然后使用另一个语句,将缓冲区打印到串口:

  char temp_buffer[256];
  int bytes_written = snprintf(temp_buffer, sizeof(temp_buffer),
                      "Solar system has %d planets\n",
                      10);
  if (bytes_written > 0)
  {
    Serial_Port_Output(temp_buffer, bytes_written);
  }
Run Code Online (Sandbox Code Playgroud)

我想切换到printf直接写入串口.根据我们的编译器文档,我拦截了函数调用以输出数据以使用串行端口.(接口使用块写入:地址和字符数).

printf函数可以使用字符缓冲区进行格式化,例如整数或浮点到文本.

问题:

  1. printf用于格式化的缓冲区在哪里?(在我做出改变之前,其他有探究的人都想知道.)
  2. 这是编译器(平台)依赖的问题吗?

平台:Arm7tdmi处理器,片上系统(SOC),IAR EW编译器.

c c++ embedded printf iar

4
推荐指数
1
解决办法
420
查看次数

C++程序的最大堆栈级别是多少?

我试着看看在通过C++中的递归获得堆栈溢出之前我能走多远.我写了这个函数

long recurse( long level ) {
    std::cout << level << std::endl;
    return recurse( ++level ) * 12 //to avoid tail recursion optimization, if present
}
Run Code Online (Sandbox Code Playgroud)

我称之为传递0作为第一个值.它打印的最后一个数字是349411,然后打印Segmentation fault并停止运行.我的猜测是内存不足,但是stack overflow在Lua中抛出错误之前,使用相同值调用的相同函数打印499982 ,如果Lua函数的内存权重比C++函数小,我会感到惊讶.

那么C++程序在停止执行之前可以获得的最大堆栈级别是多少?

是真的"直到它有记忆",还是有固定的限制?

还为什么打印Segmentation fault

这是不是只在未经授权的方式访问内存时打印的消息?

c++ stack-overflow recursion

4
推荐指数
1
解决办法
303
查看次数