Наблюдение развернуло макросы C

Я просто потратил некоторое время на разработку этого и хотел документировать это здесь: Если вы хотите получить плотность вероятности (в точке x) из трех возвращаемых значений lognorm.fit (давайте назовем их (shape, loc, scale)) , вам нужно использовать эту формулу:

x = 1 / (shape*((x-loc)/scale)*sqrt(2*pi)) * exp(-1/2*(log((x-loc)/scale)/shape)**2) / scale

Итак, в качестве уравнения, которое есть (loc это µ, shape это σ и scale это α):

x = \frac{1}{(x-\mu)\cdot\sqrt{2\pi\sigma^2}}  \cdot e^{-\frac{log(\frac{x-\mu}{\alpha})^2}{2\sigma^2}}

47
задан a3f 16 April 2015 в 07:58
поделиться

9 ответов

В зависимости от того, какой компилятор вы используете, должен быть способ увидеть код после препроцессора (который выполняет расширение макроса, макросы не известны компилятору в все) выполнено.

В gcc опция -E . Вот упрощенный пример, использующий игрушечный код, а не фактический макрос GTK +:

~/tmp> cat cpptest.c
#define SET_FLAGS(w, f) ((w)->flags |= (f))

int main(void)
{
        SET_FLAGS(0, 4711);

        return 0;
}
~/tmp> gcc -E cpptest.c
# 1 "cpptest.c"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "cpptest.c"


int main(void)
{
 ((0)->flags |= (4711));

 return 0;
}
62
ответ дан 26 November 2019 в 19:32
поделиться

Многие IDE покажут вам расширенную версию макроса в редакторе при наведении указателя мыши на идентификатор (или каким-либо другим способом). Я знаю, что Eclipse / CDT делает это, и Visual Studio делает это (по крайней мере, VS 2008).

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

3
ответ дан 26 November 2019 в 19:32
поделиться
gcc -E myfile.c
4
ответ дан 26 November 2019 в 19:32
поделиться

В Visual Studio вы можете сгенерировать файл единицы перевода, полученный препроцессором. Вы можете перейти к параметрам проекта, C / C ++ / Препроцессор и поставить «Создать предварительно обработанный файл» или «Предварительная обработка в файл» на Да (или использовать переключатель компилятора / P или / EP для включения номеров строк или нет).

13
ответ дан 26 November 2019 в 19:32
поделиться

Если вы используете gcc, вы также можете запустить

cpp myfile.c
3
ответ дан 26 November 2019 в 19:32
поделиться

Вы хотите запустить только стадию препроцессора вашего компилятора, отвечающую за раскрытие макросов. Для gcc это "gcc -E", но насчет других компиляторов я не уверен.

2
ответ дан 26 November 2019 в 19:32
поделиться

gcc даже с -E нужен путь к файлам заголовков ... например, -I _path_to_your_headers ...

Если у вас есть Makefile, как правило, то, что вы могли бы сделать, закончилось -riding CC с помощью gcc -E

Как правило, cpp - это всего лишь сценарий, добавляющий некоторые флаги в gcc для препроцессора, как традиционный ...

3
ответ дан 26 November 2019 в 19:32
поделиться

Попробуйте запустить cpp в исходном файле

2
ответ дан 26 November 2019 в 19:32
поделиться

Вы пробовали запускать gcc -E несколько раз, пока не исчезнут макросы?

1
ответ дан 26 November 2019 в 19:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: