我目前正在使用遗留的C++代码,使用gcc 2.9.X成功编译.
我被要求将此遗留代码移植到gcc 3.4.X. 大多数错误很容易纠正,但这个特殊的错误让我很困惑.
上下文 :
struct TMessage
{
THeader header;
TData data;
};
struct THeader
{
TEnum myEnum;
TBool validity;
};
Run Code Online (Sandbox Code Playgroud)
做了什么 :
const TMessage init = {{0}};
/* Later in the code ... */
TMessage message = init;
Run Code Online (Sandbox Code Playgroud)
我的问题:
{{}}运算符的含义是什么?它是否将第一个字段(标题)初始化为二进制0?它是否将第一个结构(枚举)的第一个字段初始化为(字面值)0?
我得到的3.4.6错误是invalid conversion from 'int' to 'TEnum',有一对或两对大括号.
如何在不使用memset的情况下将我的结构设置为一堆0?
提前致谢.
我正在做一些Perl并且看到我的嵌套"if"语句让我发疯.我设法在另一部分中使用防护块来减少其中一些,但我被困在这里.
您认为我可以保留代码,还是有一种"正确"的方式来重构以下内容?(我也承认对Perl来说比较新)
这实际上是一个子程序,要求用户输入列表的每个参数(外部文件).$ [3]是匹配模式,$ [2]是所考虑参数的默认值(如果没有则为NULL),$ _ [1]指定它是否是必需的.'next'语句引用下一个参数read(while循环).
在每个人的帮助下(谢谢!),这是最新版本.
100 if ( $input ne '' && ( $input !~ $match || $input =~ /'.+'/ ) ) {
101 print "! Format not respected. Match : /$match/ (without \' \')\n";
102 next;
103 }
104 if ( $input eq '' ) {
105 if ( $default eq 'NULL' ) {
106 if ( $manda eq 'y' ) {
107 print "! Mandatory parameter not filled in\n";
108 next;
109 }
110 print …Run Code Online (Sandbox Code Playgroud) 介绍性说明:我自愿选择了一个广泛的主题.你知道关于学习捕鱼的报价,就是这样.我不需要回答我的问题,我需要一个解释和建议.我知道你们擅长这个;)
嗨,大家好,
我目前正在将一些算法应用到现有程序中.长话短说,我创建了一个新类"Adder".一个加法器是代表物理对象实际上做微积分了另一个类,调用adder.calc()及其参数的成员(只是一个对象做数学上的列表).
要做这些数学,我需要一些参数,这些参数在类之外不存在(但可以设置,见下文).它们既不是配置参数也不是其他类的成员.这些参数是D1和D2,距离以及固定大小的三个数组:alpha,beta,delta.
我知道你们中的一些人阅读代码比阅读文本更舒服,所以你走了:
class Adder
{
public:
Adder();
virtual Adder::~Adder();
void set( float d1, float d2 );
void set( float d1, float d2, int alpha[N_MAX], int beta[N_MAX], int delta[N_MAX] );
// Snipped prototypes
float calc( List& ... );
// ...
inline float get_d1() { return d1_ ;};
inline float get_d2() { return d2_ ;};
private:
float d1_;
float d2_;
int alpha_[N_MAX]; // A #define N_MAX is done elsewhere
int beta_[N_MAX];
int …Run Code Online (Sandbox Code Playgroud) 我找到了C Structs和C#类的答案,但是对于C++来说却是空手而归.编辑:在C,你不能.在C#中,它是GetProperties()方法.
上下文:我有一个带有公共属性的C++类(让我们说一个带有X,Y,Z的点).我想通过UDP将这些属性发送到Java客户端.我的想法是创建一个具有三个属性的字节(char*)缓冲区(我处理了字节序问题).
prepareForUdp(char * buffer)
{
int offset = 0;
int offsetValue = 4;
char tempBuffer[16];
memcpy( tempBuffer, &X_, sizeof(X_) );
offset = offset + offsetValue;
memcpy( tempBuffer + offset, &Y_, sizeof(Y_) );
offset = offset + offsetValue;
memcpy( tempBuffer + offset, &Z_, sizeof(Z_) );
offset = offset + offsetValue;
memcpy( buffer, tempBuffer, sizeof(buffer) );
}
Run Code Online (Sandbox Code Playgroud)
我希望我的界面是进化的,因为这个点可能会得到第四维,第五维或第n维,我希望我的prepareForUdp()方法是(相对)通用的.
我的问题是:如何循环(或迭代)我的属性?
一个简单但相关的问题:在循环中调用时,"我的"是否覆盖内存?
例如,在循环之外声明它是"更好"(就内存泄漏,性能,速度而言):
my $variable;
for my $number ( @array ) {
$variable = $number * 5;
_sub($variable);
}
Run Code Online (Sandbox Code Playgroud)
或者我应该在循环中声明它:
for my $number ( @array ) {
my $variable = $number * 5;
_sub($variable);
}
Run Code Online (Sandbox Code Playgroud)
(我刚才提出的代码了,但并不意味着做任何事情,也不被使用-因为它是-在现实生活中)
将Perl的分配内存中的新空间,为每一位的一个用于迭代?
我相信这个问题对你们中的一些人来说似乎很愚蠢,但我在这里要学习.
这些假设对大多数语言都是正确的吗?
编辑:好的,我们假设我在谈论Perl/Bash脚本.
'Single quotes'
Run Code Online (Sandbox Code Playgroud)
=>根本没有解释(例如'$'或任何元字符将被视为字符并将在屏幕上打印)
"Double quotes"
Run Code Online (Sandbox Code Playgroud)
=>可变解释
为了更准确地说明我的问题,我正在编写一些shell脚本(其中引号有时候会很麻烦),并写下这一行:
CODIR=`pwd | sed -e "s/$MODNAME//"`
Run Code Online (Sandbox Code Playgroud)
如果我在我的sed中使用单引号,我的模式将是'$ MODNAME',对吧?(而不是$ MODNAME的实际值,在这种特殊情况下是'alpha')
我有另一个问题,在回声中有一个awk:
USAGE=`echo -ne "\
Usage : ./\`basename $0\` [-hnvV]\n\
\`ls -l ${MODPATH}/reference/ | awk -F " " '$8 ~ /\w+/{print "> ",$8}'\`"`
Run Code Online (Sandbox Code Playgroud)
我花了一些时间调试那个.我得出结论,反引号被转义,以便解释器不会"拆分"命令(并在«basename»之前停止).在awk命令中,'$ 8'被awk成功解释,因此不是shell.如果我想使用shell变量怎么办?我会写awk -F"\"$ MY_SHELL_VAR \""吗?因为$ MY_SHELL_VAR是,将被awk解释,不会吗?
不要犹豫,添加任何有关引用或反引号的信息!
谢谢 !:)
使用新的代码片段,我问自己一个问题:多个typedef是否在同一基本类型上影响性能?
示例(我知道这很愚蠢,但这就是我实际看到的,typedef的四个级别...):
typedef float T_FLOAT
typedef T_FLOAT T_TIME
typedef T_TIME T_CURRENTTIME
tyoedef T_CURRENTTIME CLOCKCURRENTTIME
// etc.
Run Code Online (Sandbox Code Playgroud)
我正在使用的应用程序非常庞大(数十万LoC),所以我想知道......
在GCC中使用-02(有时是-03),是否将这4种类型中的每一种都计算为基类型?
任何抬头赞赏=)
我正在开发一个非常大的项目,我想用gdb调试.不幸的是,使用-gflag进行编译需要两天半的时间并且输出大于60Go的库(项目需要大约1Go -g).
是否有更简单的方法来获取符号表(即能够回溯),如果是,如何?我已经看到了GDB提供三种级别的调试(-g 水平作为描述在这里),这将有助于?会string吗?
提前致谢.