小编Isa*_*rke的帖子

双花括号初始化C结构的含义是什么?

我目前正在使用遗留的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?

提前致谢.

c c++ struct

18
推荐指数
1
解决办法
9118
查看次数

我应该避免在Perl中嵌套if语句吗?

我正在做一些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)

perl coding-style nested

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

编码数学类/函数时的最佳实践是什么?

介绍性说明:我自愿选择了一个广泛的主题.你知道关于学习捕鱼的报价,就是这样.我不需要回答我的问题,我需要一个解释和建议.我知道你们擅长这个;)


嗨,大家好,

我目前正在将一些算法应用到现有程序中.长话短说,我创建了一个新类"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++ math

3
推荐指数
1
解决办法
936
查看次数

我可以循环C++类的(公共)属性吗?

我找到了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()方法是(相对)通用的.

我的问题是:如何循环(或迭代)我的属性?

c++ iteration attributes

3
推荐指数
1
解决办法
1925
查看次数

在循环中调用时,"我的"是否覆盖内存?

一个简单但相关的问题:在循环中调用时,"我的"是否覆盖内存?
例如,在循环之外声明它是"更好"(就内存泄漏,性能,速度而言):

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的分配内存中的新空间,为每一位的一个用于迭代?

variables perl memory-management

2
推荐指数
1
解决办法
656
查看次数

(嵌套|双|简单)引号的正确用法是什么?

我相信这个问题对你们中的一些人来说似乎很愚蠢,但我在这里要学习.
这些假设对大多数语言都是正确的吗?
编辑:好的,我们假设我在谈论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解释,不会吗?

不要犹豫,添加任何有关引用或反引号的信息!

谢谢 !:)

bash shell quotes perl

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

链式typedef:Perf.问题?

使用新的代码片段,我问自己一个问题:多个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种类型中的每一种都计算为基类型?

任何抬头赞赏=)


c++ typedef

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

获取没有-g标志的gdb可读符号?

我正在开发一个非常大的项目,我想用gdb调试.不幸的是,使用-gflag进行编译需要两天半的时间并且输出大于60Go的库(项目需要大约1Go -g).

是否有更简单的方法来获取符号表(即能够回溯),如果是,如何?我已经看到了GDB提供三种级别的调试(-g 水平作为描述在这里),这将有助于?会string吗?

提前致谢.

c++ debugging gdb symbols

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