我已将类从全局命名空间移动到特定命名空间.我也改变了班级名称.我想将使用这些类的所有源文件转换为新格式.我正在考虑bash使用sedCygwin上的文件或执行perl脚本的脚本.我在bash剧本上遇到了麻烦.
这是我正在尝试执行的过程:
我在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++书籍似乎将变量和对象视为同义词.
你对此有什么看法?
关于实体,引用C++ 0x草案:
实体是价值,对象,参考,功能[...]
表示实体的每个名称都由声明引入.
变量由对象的声明引入
从这些陈述中我得出结论,变量是名称,因此不能是对象.这真让我感到困惑:)
可能重复:
C的智能指针/安全内存管理?
我有一个嵌入式应用程序,我在动态内存中分配一个对象并将其传递给其他模块.
我想创建一个指向这个对象的智能指针.C++中有许多用于使用和实现智能指针的示例.
我正在寻找一个只有C语言的智能指针实现.
谢谢.
将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.
我搜索了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) 我具有以下结构(在嵌入式系统上):
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) 我想在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#应用程序,我想将它部署到该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字段.公司名称是两个单词之间的空格.这个空间会造成问题吗?
我在一个受限制的嵌入式系统上工作.
目前我们使用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函数可以使用字符缓冲区进行格式化,例如整数或浮点到文本.
问题:
printf用于格式化的缓冲区在哪里?(在我做出改变之前,其他有探究的人都想知道.)平台:Arm7tdmi处理器,片上系统(SOC),IAR EW编译器.
我试着看看在通过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?
这是不是只在未经授权的方式访问内存时打印的消息?