Нужно ли учитывать директивы препроцессора в графе потока управления? - PullRequest
3 голосов
/ 03 апреля 2019

Нужно ли учитывать директивы препроцессора при преобразовании C-кода в граф потока операций?

Например:

#define pi 3.14

С моей точки зрения, нет необходимости рассматриватьих как команды, так как они не обрабатываются во время выполнения.

Ответы [ 2 ]

1 голос
/ 03 апреля 2019

Для графика потока управления важен вывод препроцессора.Если кто-то выполняет что-то вроде #define woozle(x,y,z) (x() ? y() : z()), а затем использует woozle(f1,f2,f3), то при рисовании графа потока управления следует обращаться с ним так же, как с (f1() ? f2() : f3()), независимо от того, как эта комбинация токенов стала представлена ​​в препроцессоре.выход.

1 голос
/ 03 апреля 2019

Как объяснено здесь , и, как вы сами сказали, препроцессор не меняет время выполнения.Каждая инструкция выполняется до того, как ваша программа скомпилирована, поэтому вам не нужно учитывать их на графике, поскольку каждая инструкция препроцессора будет постоянной во время выполнения.

Вы можете сделать исключение для макросов, посколькуон определяет поведение, которое можно использовать во время выполнения, например функции.

...