LINUX.ORG.RU

История изменений

Исправление shkolnick-kun, (текущая версия) :

а в plain C у вас нет и никогда не будет вариантов помимо простыни нечитабельного говнокода с ручными проверками

Как насчет

#define MY_CHK_ARR(prefix,a,i,postfix) \
do{                                    \
    if (MY_UNLIKELY(i > MY_SZ_(a))) {  \
        printf("Out of bounds access: %s: %d", __FILE__, __LINE__); \
        exit(-1);                      \
    }                                  \
    prefix a[i] postfix;               \
}while (0)

По сути - та же 1 иснстукция.

Без простыни.

Исправление shkolnick-kun, :

а в plain C у вас нет и никогда не будет вариантов помимо простыни нечитабельного говнокода с ручными проверками

Как насчет

#define MY_CHK_ARR(prefix,a,i,postfix) \
do{                                    \
    if (MY_UNLIKELY(i > MY_SZ_(a))) {  \
        printf("Out of bounds access: %s: %d", __FILE__, __LINE__ );  \
        exit(-1); \
    }                                  \
    prefix a[i] postfix;               \
}while (0)

По сути - та же 1 иснстукция.

Без простыни.

Исправление shkolnick-kun, :

а в plain C у вас нет и никогда не будет вариантов помимо простыни нечитабельного говнокода с ручными проверками

Как насчет

#define MY_CHK_ARR(prefix,a,i,postfix) \
do{                                    \
    if (MY_UNLIKELY(i > MY_SZ_(a))) {  \
        exit(__LINE__ | __FILE__<<16); \
    }                                  \
    prefix a[i] postfix;               \
}while (0)

По сути - та же 1 иснстукция.

Без простыни.

Исходная версия shkolnick-kun, :

а в plain C у вас нет и никогда не будет вариантов помимо простыни нечитабельного говнокода с ручными проверками

Как насчет

#define MY_CHK_ARR(prefix,a,i,postfix) \
do{
    if (MY_UNLIKELY(i > MY_SZ_(a))) {  \
        exit(__LINE__ | __FILE__<<16); \
    }                                  \
    prefix a[i] postfix;               \
}while (0)

По сути - та же 1 иснстукция.

Без простыни.