最有用的用户取得C-宏(海合会,也C99)? [英] The most useful user-made C-macros (in GCC, also C99)?
本文介绍了最有用的用户取得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屋!
查看全文