Я покажу вариант на шаблонах, вариант на препроцессоре остаётся за вами - покажите как с помощью этого мощнейшего инструмента кодогенерации решить такую тривиальнейшую задачу, как N раз повторить кусок кода.
Препроцессор С Тьюринг-неполный и только средствами препроцессора циклы и прочее задача нетривиальная (если вообще разрешимая). Но вот какая штука - UNIX написана программистами для программистов и тут это сделать элементарно.
rep_example.c
Код
#include "rep.h"
#define REPN(s, N) REP##N(s)
#define EXPR_REP asm volatile("nop");
REPN(EXPR_REP, 10)
#define REPN(s, N) REP##N(s)
#define EXPR_REP asm volatile("nop");
REPN(EXPR_REP, 10)
Цитата
sasa@sasa-laptop:~/tst$ ./rep.sh 100 && cpp rep_example.c
# 1 "rep_example.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "rep_example.c"
# 1 "rep.h" 1
# 2 "rep_example.c" 2
asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); asm volatile("nop");
# 1 "rep_example.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "rep_example.c"
# 1 "rep.h" 1
# 2 "rep_example.c" 2
asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); asm volatile("nop");
rep.sh
Код
#!/bin/bash
echo "#define REP0(s) " > rep.h
echo "#define REP1(s) s" >> rep.h
for N in $(seq 1 $[$1 -1])
do
echo "#define REP$[N+1](s) s REP$N(s)" >> rep.h
done
echo "#define REP0(s) " > rep.h
echo "#define REP1(s) s" >> rep.h
for N in $(seq 1 $[$1 -1])
do
echo "#define REP$[N+1](s) s REP$N(s)" >> rep.h
done
То что сгенерировалось в rep.h
Код
#define REP2(s) s s
#define REP3(s) s REP2(s)
#define REP4(s) s REP3(s)
#define REP5(s) s REP4(s)
#define REP6(s) s REP5(s)
#define REP7(s) s REP6(s)
#define REP8(s) s REP7(s)
#define REP9(s) s REP8(s)
#define REP10(s) s REP9(s)
#define REP11(s) s REP10(s)
#define REP12(s) s REP11(s)
#define REP13(s) s REP12(s)
#define REP14(s) s REP13(s)
#define REP3(s) s REP2(s)
#define REP4(s) s REP3(s)
#define REP5(s) s REP4(s)
#define REP6(s) s REP5(s)
#define REP7(s) s REP6(s)
#define REP8(s) s REP7(s)
#define REP9(s) s REP8(s)
#define REP10(s) s REP9(s)
#define REP11(s) s REP10(s)
#define REP12(s) s REP11(s)
#define REP13(s) s REP12(s)
#define REP14(s) s REP13(s)
..........
полностью думаю все 100 строк нет смысла писать