我的输入代码中有几个结构定义。例如:
struct node {
int val;
struct node *next;
};
或者
typedef struct {
int numer;
int denom;
} Rational;
我使用以下行将它们转换为一行并复制两次。
sed '/struct[^(){]*{/{:l N;s/\n//;/}[^}]*;/!t l;s/ */ /g;p;p}'
结果是这样的:
struct node { int val; struct node *next;};
struct node { int val; struct node *next;};
struct node { int val; struct node *next;};
typedef struct { int numer; int denom;} Rational;
typedef struct { int numer; int denom;} Rational;
typedef struct { int numer; int denom;} Rational;
这就是我要的:
- 我想将第一行恢复到原来的结构块
我希望第二行变成一个看起来像这样的函数标题......
void init_structName( structName *var, int data1, int data2 )
-structName 基本上是结构的名称。
-var 是您喜欢的任何名称。
-data1, data2.... 是结构中的值。
3.我想把第三行变成函数体。我在哪里初始化数据参数。它看起来像这样。
{
var->data1 = data1;
var->data2 = data2;
}
请记住,我在输入文件中的所有结构定义都放在一行中并复制了三遍。因此,当代码找到结构定义时,它可以假设下面还会有两个副本。
例如,如果输入文件具有上面显示的重复行,这就是我想要的输出。
struct node {
int val;
struct node *next;
};
void init_node(struct node *var, int val, struct node *next)
{
var->val = val;
var->next = next;
}
typedef struct {
int numer;
int denom;
} Rational;
void init_Rational( Rational *var, int numer, int denom )
{
var->numer = numer;
var->denom = denom;
}
以防有人好奇。这些函数将从主函数调用以初始化结构变量。
有人可以帮忙吗?我意识到这有点困难。非常感谢!!