|
скрипт + gcc |
|
|
|
 |
Ответов
|
May 21 2009, 05:45
|
Участник

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

|
Спасибо за совет, будем посмотреть
|
|
|
|
|
May 21 2009, 08:23
|
Участник

Группа: Новичок
Сообщений: 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, но вот что делают первые два?
|
|
|
|
|
May 22 2009, 06:24
|
Участник

Группа: Новичок
Сообщений: 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 , такое сочетание параметров я не нашел нигде. 
|
|
|
|
|
May 25 2009, 11:11
|
Участник

Группа: Новичок
Сообщений: 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 ) или нет? Мне хотелось бы понять сам механизм.
Сообщение отредактировал antiwin - May 25 2009, 11:28
|
|
|
|
|
May 25 2009, 14:33
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
May 26 2009, 06:27
|
Участник

Группа: Новичок
Сообщений: 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
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|