相关疑难解决方法(0)

如何使用C预处理器编写while循环?

我从教育/黑客的角度来问这个问题,(我真的不想这样编码).

是否可以仅使用C预处理程序指令实现while循环.我知道宏不能递归扩展,那么如何实现呢?

c while-loop c-preprocessor

66
推荐指数
7
解决办法
5万
查看次数

C预处理器宏用于返回重复一定次数的字符串

有人知道任何C99预处理器魔法允许创建一个由另一个重复N次的字符串组成的字符串吗?

例如

STRREP( "%s ", 3 )
Run Code Online (Sandbox Code Playgroud)

"%s %s %s "
Run Code Online (Sandbox Code Playgroud)

经过预处理.

我能想到的唯一一件事就是这样

#define STRREP( str, N ) STRREP_##N( str )    
#define STRREP_0(str) ""
#define STRREP_1(str) str
#define STRREP_2(str) str str
#define STRREP_3(str) str str str
...
Run Code Online (Sandbox Code Playgroud)

哪个效果很好,但是很难看,因为我必须手动为每个重复长度定义一个宏.我想与variadic宏一起使用它,宏返回这里显示的宏参数的数量.

c macros c-preprocessor

13
推荐指数
3
解决办法
7679
查看次数

在C中比较两个数组,逐个元素

为了使我的计算物理项目中的一个程序(不是由我编写)更加动态,我一直在努力实现C中非常简单的事情:在if条件下逐个元素地比较两个不同的数组.

#include <math.h>
#include <stdio.h>
#include "header.h"
const   int nParam = 10;
double  a[nParam], a_tmp[nParam];
double values[10000];

double FitParam(double x){
    int xindex;
    double value;

    xindex=(int) x;

    if (a_tmp[1]==a[1] && a_tmp[2]==a[2] && a_tmp[3]==a[3] && a_tmp[4]==a[4]){ 
        value=values[xindex];
        return(value);
    }

// code continues... (very long subroutine and there is recursion for
// the subroutine so this if statement above is very important).
Run Code Online (Sandbox Code Playgroud)

每次运行程序时,数组a []都有不同数量的重要元素; 例如,现在,我们仅将这个子程序用于元素[1]到[4].但是,在其他情况下,我们希望分别拥有更少或更多的元素,例如最多3个元素或最多5个元素.

基本上,我希望能够重写上面的if语句,使其成为动态...换句话说,如果考虑了N个元素,那么它将会:

if (a_tmp[1]==a[1] && ... && a_tmp[N]==a[N]){}

因此,每当我们感兴趣的元素的数量N改变时,条件应该变化(N被定义为该文件的头部中的#define,我将其命名为header.h).

非常感谢您对此任务的支持.谢谢.

c arrays

6
推荐指数
2
解决办法
4万
查看次数

多次调用 C 预处理器宏(通过变量)

我想清理我的汇编代码并提供一种通过宏多次调用“NOP”的方法:

#define NOP() asm(" nop")

#define NOP_N( N ) \
    NOP(); \
    NOP(); \
    .... call NOP() N times
Run Code Online (Sandbox Code Playgroud)

我无法确定这在宏中是否可行。

显然,出于性能原因,我不想要这样的东西:

#define NOP_N( n ) { register int i; for(i=0;i<n;i++) asm(" nop"); }
Run Code Online (Sandbox Code Playgroud)

这违背了 NOP 的目的:

L17:                                    ; NOP_N(3);
        nop
        addi      1,r0                  ; Unsigned
        cmpi      3,r0
        blo       L17
Run Code Online (Sandbox Code Playgroud)

代码是C和汇编语言,所以这里不能涉及C++。此外,编译器相当陈旧,不支持可变参数宏......

c macros assembly

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

标签 统计

c ×4

c-preprocessor ×2

macros ×2

arrays ×1

assembly ×1

while-loop ×1