реклама на сайте
подробности

 
 
> скрипт + gcc
antiwin
сообщение May 20 2009, 08:51
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 22
Регистрация: 20-05-09
Пользователь №: 49 303



Народ, такая проблема. Необходимо при компиляции определить сколько раз вызывается функция (foo), а так же передать переменную из препроцессора(скрипта) в код программы.
1111493779.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
antiwin
сообщение May 21 2009, 05:45
Сообщение #2


Участник
*

Группа: Новичок
Сообщений: 22
Регистрация: 20-05-09
Пользователь №: 49 303



Спасибо за совет, будем посмотреть
Go to the top of the page
 
+Quote Post
antiwin
сообщение May 21 2009, 08:23
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 22
Регистрация: 20-05-09
Пользователь №: 49 303



Цитата(antiwin @ May 21 2009, 09:45) *
Спасибо за совет, будем посмотреть



Не совсем понятно как формируется выражение
CURR=`cpp -E ${FILE} | grep -vv "^#" | grep "foo(" | grep -vv -c "void foo("`
Как я понял, последние два оператора проверяют синтаксис на наличие foo, но вот что делают первые два? smile3046.gif
Go to the top of the page
 
+Quote Post
antiwin
сообщение May 22 2009, 06:24
Сообщение #4


Участник
*

Группа: Новичок
Сообщений: 22
Регистрация: 20-05-09
Пользователь №: 49 303



Цитата(antiwin @ May 21 2009, 12:23) *
Не совсем понятно как формируется выражение
CURR=`cpp -E ${FILE} | grep -vv "^#" | grep "foo(" | grep -vv -c "void foo("`
Как я понял, последние два оператора проверяют синтаксис на наличие foo, но не понятно что значит grep -vv , такое сочетание параметров я не нашел нигде. smile3046.gif
Go to the top of the page
 
+Quote Post
antiwin
сообщение May 25 2009, 06:02
Сообщение #5


Участник
*

Группа: Новичок
Сообщений: 22
Регистрация: 20-05-09
Пользователь №: 49 303



Спасибо, прояснилось. Как я понимаю этот скрипт надо вписать в makefile?. И еще, давно хотел спросить, запись типа #define _FOO_CALL_COUNT_H определяет файл FOO_CALL_COUNT.H, но как препроцессор знает что перед H надо ставить точку. Почему просто не написать #include <FOO_CALL_COUNT.H>

yeah.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 25 2009, 07:43
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(antiwin @ May 25 2009, 09:02) *
запись типа #define _FOO_CALL_COUNT_H определяет файл FOO_CALL_COUNT.H, но как препроцессор знает что перед H надо ставить точку.
Препроцессор ничего не знает и не ставит. Определяется символ _FOO_CALL_COUNT_H и дальше идет проверка именно этого символа. Это программист сам для себя решает, что _FOO_CALL_COUNT_H относится к файлу foo_call_count.h. Кстати, имена, начинающиеся с подчеркивания зарезервированы за компилятором и стандартной библиотекой, во избежание неприятностей свои имена с подчеркивания лучше не начинать.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
antiwin
сообщение May 25 2009, 11:11
Сообщение #7


Участник
*

Группа: Новичок
Сообщений: 22
Регистрация: 20-05-09
Пользователь №: 49 303



Цитата(Сергей Борщ @ May 25 2009, 11:43) *
Определяется символ _FOO_CALL_COUNT_H и дальше идет проверка именно этого символа. Это программист сам для себя решает, что _FOO_CALL_COUNT_H относится к файлу foo_call_count.h.


То есть, компилятор у себя в "уме" держит некую таблицу в которой, допустим, строке _FOO_CALL_COUNT_H соответствует include <FOO_CALL_COUNT.H>?

Цитата(Сергей Борщ @ May 25 2009, 11:43) *
Скрипт лучше поместить в отдельный sh-файл и запускать при необходимости (из мейкфайла).
Разберем конструкцию по строчкам:
1. #ifndef _FOO_CALL_COUNT_H
проверяем не объявлен ли _FOO_CALL_COUNT_H.

Т.е запуск скрипта с помощью команды sh (скрипт)?
Хотел бы уточнить выражение (объявлен ли _FOO_CALL_COUNT_H), если следовать синтаксису С, то это запись (_FOO_CALL_COUNT_H FOO_CALL_COUNT.H ) или нет? Мне хотелось бы понять сам механизм.

smile.gif

Сообщение отредактировал antiwin - May 25 2009, 11:28
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 25 2009, 14:33
Сообщение #8


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(antiwin @ May 25 2009, 14:11) *
То есть, компилятор у себя в "уме" держит некую таблицу в которой, допустим, строке _FOO_CALL_COUNT_H соответствует include <FOO_CALL_COUNT.H>?
Нет никакой таблицы. Нет никакого соответствия. вот смотрите:
Код
foo.h:
#ifndef  FOO_H_INCLUDED__
#define FOO_H_INCLUDED__
.....
#endif  //FOO_H_INCLUDED__

abc.c:
#include "foo.h"
....
#include "foo.h"
Что происходит при компиляции abc.c?
1)удаляются все комментарии.
2)весь текст foo.h вставляется в те места, где был #include "foo.h". Все, #include исчезли, на их месте появился текст.
3) Теперь препроцессор проходит весь файл от начала до конца. В месте, где файл foo.h вставлен первый раз, он встречает строку #ifndef FOO_H_INCLUDED__.
4)Он ищет в своих списках символ FOO_H_INCLUDED__ и не находит его. Символ не определен. Условие выполнилось, препроцессор просматривает текст внутри условия.
5) тут он встречает строку #define FOO_H_INCLUDED__. Он вносит такой символ в свои списки - все, символ определен.
6) он просматривает файл дальше и доходит до места, где был второй #include "foo.h". Тут он снова встречает строку #ifndef FOO_H_INCLUDED__.
7) Он снова смотрит в своих списках и теперь уже находит там символ FOO_H_INCLUDED__. Условие не выполнилось, препроцессор выкидывает весь текст до #endif .

Все, содержимое foo.h попало компилятору только один раз. Как мы обозвали этот символ - FOO_H_INCLUDED__ или FOO_H_ или SKIP_THIS_FILE или TIPA_TEST - препроцессору все равно. Это наша забота, чтобы в каждом заголовочном файле был определен уникальный символ. И проще всего это сделать, связав имя символа с именем файла.

Чтобы понять смысл выражения "определен символ" - лучше всего прочитать документацию на препроцессор (не компилятор, а именно препроцессор - до компилятора эти символы не доходят).


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
antiwin
сообщение May 26 2009, 06:27
Сообщение #9


Участник
*

Группа: Новичок
Сообщений: 22
Регистрация: 20-05-09
Пользователь №: 49 303



Цитата(Сергей Борщ @ May 25 2009, 18:33) *
Это наша забота, чтобы в каждом заголовочном файле был определен уникальный символ...

Я правильно понал, об'явление уникального символа предохраняет от повторной компиляции?
А вроде бы у препроцессора есть функции на этот счет?

Цитата(Сергей Борщ @ May 25 2009, 18:33) *
Он ищет в своих списках символ FOO_H_INCLUDED__ ...

Значит, что то вроде таблицы все та ки есть...
За ссылку спасибо, как почитаю отпишусь
немного отвлеченный вопрос.
AT (ADDR (.text) + SIZEOF (.text))
SIZEOF вроде понятно-это размер секции, тогда ADDR-это начало? и что это за оператор AT?.
И еще, в WinAvr есть папка с man, как вот эти man прочесть? Я думаю, что масса вопросов сразу бы отпала.

Сообщение отредактировал antiwin - May 26 2009, 06:47
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- antiwin   скрипт + gcc   May 20 2009, 08:51
- - gotty   Код#!/bin/sh COUNT=0 for FILE in *.c do CUR...   May 20 2009, 09:14
|||- - Сергей Борщ   Цитата(antiwin @ May 26 2009, 09:27) Я пр...   May 26 2009, 08:13
||- - gotty   Цитата(antiwin @ May 25 2009, 09:02) Спас...   May 25 2009, 07:47
|- - gotty   Первый обрабатывает препроцессором файл, второй от...   May 22 2009, 11:26
- - antiwin   p.s отвечаю не сразу. т.к дома нет инета.   May 25 2009, 07:39
- - antiwin   Привет всем, такой вот проблем: как можно узнать а...   Jun 29 2009, 07:49
|- - alx2   Цитата(antiwin @ Jun 29 2009, 12:49) Прив...   Jul 3 2009, 19:08
|- - antiwin   Цитата(alx2 @ Jul 3 2009, 23:08) В общем ...   Jul 14 2009, 11:08
|- - gotty    Цитата(antiwin @ Jul 14 2009, 14:08) В т...   Jul 14 2009, 11:30
|- - Сергей Борщ   Цитата(antiwin @ Jul 14 2009, 14:08) мене...   Jul 14 2009, 11:41
||- - AHTOXA   Наверное речь идёт о дефрагментации свободных учас...   Jul 14 2009, 13:05
|||- - gotty   Цитата(AHTOXA @ Jul 14 2009, 16:05) Наве...   Jul 15 2009, 06:22
||- - antiwin   Цитата(Сергей Борщ @ Jul 14 2009, 15:41) ...   Jul 16 2009, 08:42
||- - aesok   Цитата(antiwin @ Jul 16 2009, 12:42) Прос...   Jul 16 2009, 09:34
|||- - antiwin   Цитата(aesok @ Jul 16 2009, 13:34) А како...   Jul 16 2009, 11:58
|||- - aesok   Цитата(antiwin @ Jul 16 2009, 15:58) Кол-...   Jul 16 2009, 13:19
|||- - antiwin   Цитата(aesok @ Jul 16 2009, 17:19) объясн...   Jul 17 2009, 09:05
|||- - smac   Цитата(antiwin @ Jul 17 2009, 13:05) Не в...   Jul 17 2009, 10:19
|||- - antiwin   Цитата(smac @ Jul 17 2009, 14:19) Если ф-...   Jul 17 2009, 10:59
|||- - smac   Цитата(antiwin @ Jul 17 2009, 14:59) Усло...   Jul 17 2009, 15:33
|||- - antiwin   Цитата(smac @ Jul 17 2009, 19:33) Сомнева...   Jul 23 2009, 08:31
|||- - aesok   Цитата(antiwin @ Jul 23 2009, 12:31) .......   Jul 23 2009, 10:16
|||- - smac   Цитата(antiwin @ Jul 23 2009, 12:31) Коне...   Jul 23 2009, 10:55
|||- - antiwin   Цитата(smac @ Jul 23 2009, 14:55) Не вижу...   Jul 24 2009, 08:46
|||- - aesok   Цитата(antiwin @ Jul 24 2009, 12:46) Разн...   Jul 24 2009, 09:26
|||- - aesok   call-used call-saved   Jul 24 2009, 10:47
|||- - antiwin   Цитата(aesok @ Jul 24 2009, 13:26) Анализ...   Jul 27 2009, 08:52
|||- - Сергей Борщ   Цитата(antiwin @ Jul 27 2009, 11:52) Поче...   Jul 27 2009, 09:00
||- - Сергей Борщ   Цитата(antiwin @ Jul 16 2009, 11:42) К то...   Jul 16 2009, 09:54
|- - alx2   Прошу прощения за молчание - я в отпуске, сюда заг...   Jul 17 2009, 12:52
|- - antiwin   Цитата(alx2 @ Jul 17 2009, 16:52) А потом...   Jul 21 2009, 10:05
|- - Troll   Цитата(antiwin @ Jul 21 2009, 17:05) Вот ...   Jul 21 2009, 11:16
|- - alx2   Цитата(antiwin @ Jul 21 2009, 15:05) Попу...   Jul 21 2009, 19:52
|- - antiwin   Цитата(alx2 @ Jul 21 2009, 23:52) Если в ...   Jul 22 2009, 08:29
|- - alx2   Цитата(antiwin @ Jul 22 2009, 13:29) Да, ...   Jul 22 2009, 14:10
- - Troll   Цитата(antiwin @ Jun 29 2009, 13:49) И ещ...   Jul 8 2009, 05:48
- - Troll   Цитата(gotty @ Jul 15 2009, 13:22) Ну, ес...   Jul 15 2009, 10:28
- - Troll   ЦитатаСмысл задуманного как раз в том чтобы освобо...   Jul 17 2009, 10:48
- - Troll   Цитата(antiwin @ Jul 17 2009, 17:59) Осво...   Jul 17 2009, 13:58


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 11:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01491 секунд с 7
ELECTRONIX ©2004-2016