Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Представляете, что будет, если скзать человеку, изучающий Си в течение месяца-двух, что в ядре линукса активно используют goto?
TIM2->CCR1H = (u8)(uPulse >> 8);
TIM2->CCR1L = (u8)(uPulse);
#define ChangePulse_PWM(timer, channel, pulse) \
timer##->CCR##channel##H = (u8)(pulse >> 8); \
timer##->CCR##channel##L = (u8)(pulse);
ChangePulse_PWM(TIM2, 3, uPulse);
#define sum(n,a,b){size_t i; for(i = 0; i < (n); i++) (a)[i] += (b)[i];}
#define cbrt(X) _Generic((X), long double: cbrtl, \
default: cbrt, \
float: cbrtf)(X)
#ifndef T
#error T should be defined
#else
…
#undef T
#endif
#include "templates.h"
// на всякий пожарный
#ifdef T
#undef T
#endif
#define T float
#include "sum_as_template.h"
// а тут знаем, что undef сделан
#define T double
#include "sum_as_template.h"
#define T int
#include "sum_as_template.h"
dnl $Id$
m4_divert(0)
#pragma GCC dependency "sums.c.m4"
m4_divert(-1)
m4_define([sums_template],[
//! computes a:=a+b where a and b are two $1 arrays of length n
void sums_$1(int n, $1 *a, $1 *b);
])
m4_divert(0)
m4_include(sums.list)
dnl $Id$
m4_divert(0)
#pragma GCC dependency "sums.c.m4"
m4_divert(-1)
m4_define([sums_template],[
void sums_$1(int n, $1 *a, $1 *b)
{
/* computes a:=a+b where a and b are two $1 arrays of length n */
int i;
for(i=0;i<n;i++) a[[i]]+=b[[i]];
}
])
m4_divert(0)
m4_include(sums.list)
%.c: %.c.m4
m4 -R ../scripts/m4sugar.m4f $< >$@
%.h: %.h.m4
m4 -R ../scripts/m4sugar.m4f $< >$@
struct A {
void (*virtualMethod)(int,int);
}
Шаблоны на C. Да! На чистом С. Не С++