最有用的用户取得C-宏(海合会,也C99)? [英] The most useful user-made C-macros (in GCC, also C99)?

查看:107
本文介绍了最有用的用户取得C-宏(海合会,也C99)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

什么 C 宏是在你看来是最有用的?我发现下面的之一,我用做向量运算在 C

 的#define v3_op_v3(X,OP,Y,Z){Z [0] = X [0] OP Y [0]; \\
                               Z [1] = X [1]的运算Y [1]; \\
                               Z [2] = X [2]的运算Y [2];}

它的工作原理类似的:

  v3_op_v3(vectorA,+,vectorB,vectorC);
v3_op_v3(vectorE,*,vectorF,vectorJ);
...


解决方案

有关,每个C99循环:

 #定义的foreach(项目,数组)\\
    对于(INT保持= 1,\\
            计数= 0,\\
            大小= sizeof的(阵列)/ *的sizeof(数组); \\
        保持和放大器;&安培;数=大小!; \\
        保持=!不断,算上++)\\
      对于(项目=(阵列)+计数;保持;!=守守)诠释主(){
  诠释一个[] = {1,2,3};
  INT总和= 0;
  的foreach(INT常量* C,A)
    总和+ = * C;
  的printf(总和=%d个\\ N,总和);  //多维数组
  INT A1 [] [2] = {{1,2},{3,4}};
  的foreach(中间体(* C1)[2],a1)中
    的foreach(INT * C2,C1 *)
      的printf(C2 =%d个\\ N,* C2);
}

What C macro is in your opinion is the most useful? I have found the following one, which I use to do vector arithmetic in C:

#define v3_op_v3(x, op, y, z) {z[0]=x[0] op y[0]; \
                               z[1]=x[1] op y[1]; \
                               z[2]=x[2] op y[2];}

It works like that:

v3_op_v3(vectorA, +, vectorB, vectorC);
v3_op_v3(vectorE, *, vectorF, vectorJ);
...

解决方案

for-each loop in C99:

#define foreach(item, array) \
    for(int keep=1, \
            count=0,\
            size=sizeof (array)/sizeof *(array); \
        keep && count != size; \
        keep = !keep, count++) \
      for(item = (array)+count; keep; keep = !keep)

int main() {
  int a[] = { 1, 2, 3 };
  int sum = 0;
  foreach(int const* c, a)
    sum += *c;
  printf("sum = %d\n", sum);

  // multi-dim array
  int a1[][2] = { { 1, 2 }, { 3, 4 } };
  foreach(int (*c1)[2], a1)
    foreach(int *c2, *c1) 
      printf("c2 = %d\n", *c2);
}

这篇关于最有用的用户取得C-宏(海合会,也C99)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆