Операторы времени компиляции в C - PullRequest
3 голосов
/ 22 января 2012

Я знаком только с одним оператором времени компиляции в C - sizeof. Есть ли какие-то другие, о которых я как программист должен знать?

Ответы [ 4 ]

3 голосов
/ 22 января 2012

Только sizeof, что я знаю, хотя в C99 sizeof не может быть сделан во время компиляции для массивов переменной длины (VLA).

2 голосов
/ 22 января 2012

Хотя это не строго оператор , существует offsetof, макрос, определенный в stddef.h. Он используется для получения смещения элемента поля в struct. Например:

#include <stddef.h>
struct my_struct
{
  int alpha;
  int beta;
};

int get_offset_to_beta(void)
{
  return offsetof(struct my_struct, beta);
}
2 голосов
/ 22 января 2012

Новый стандарт C также имеет _Alignof, который работает аналогично sizeof.

2 голосов
/ 22 января 2012

Я думаю, что вы цепляетесь за упущенную терминологию, чтобы описать это константное выражение или целочисленное константное выражение . Результатом некоторых операторов могут быть (целочисленные) константные выражения, если их операнды есть, и, как вы указали, результат sizeof может быть даже, если его операнд не является константой, если он не является VLA. См. 6.6 в C99:

http://port70.net/~nsz/c/c99/n1256.html#6.6

...