Или не получается ? Покажите как делаете.
Вопросы по С/С++ (СИ)
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
pokk, а почему бы и нет ?
Или не получается ? Покажите как делаете.
Или не получается ? Покажите как делаете.
Re: Вопросы по С/С++ (СИ)
C #error я погорячился лучше скорее #warning подойдет
Как ему задать что бы он TEST посчитал а потом заменил
Как ему задать что бы он TEST посчитал а потом заменил
Код: Выделить всё
#define TEST (uint16_t)(2*30*3)
#warning "VarTest=TEST"
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Походу не получится так сделать. Директива warning игнорит макросы и тупо выводит то, что идёт за этой директивой, символ в символ.
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Думаю, никак
Re: Вопросы по С/С++ (СИ)
[uquote="pokk",url="/forum/viewtopic.php?p=3470652#p3470652"]Можно ли c помощью #error выдать define ?[/uquote]
Ответ ради ответа:
#define __STR(x) #x
#define __STR2(x) __STR(x)
#pragma message __STR2(__LINE__)
Но есть нюанс:
[uquote="pokk",url="/forum/viewtopic.php?p=3470652#p3470652"]В общем есть define который рассчитываться, и хотелось бы после компиляции по смотреть что он там насчитал, и как округлил.[/uquote]
Препроцессор - это подстановщик - он ничего не считает и не округляет - он подставляет выражение по месту использования определения. Кстати, он также ничего и не компилирует - лишь передаёт компилятору С-файл с уже развёрнутыми #define #include директивами. Включите в проекте опцию "не удалять промежуточные файлы компиляции" и поищите среди временных файлов эти самые развёрнутые С-файлы. Могут называться *.i, *.ii, *.pre или как нибудь ещё - очень полезно на будущее при разборках с препроцессором.
Ответ ради ответа:
#define __STR(x) #x
#define __STR2(x) __STR(x)
#pragma message __STR2(__LINE__)
Но есть нюанс:
[uquote="pokk",url="/forum/viewtopic.php?p=3470652#p3470652"]В общем есть define который рассчитываться, и хотелось бы после компиляции по смотреть что он там насчитал, и как округлил.[/uquote]
Препроцессор - это подстановщик - он ничего не считает и не округляет - он подставляет выражение по месту использования определения. Кстати, он также ничего и не компилирует - лишь передаёт компилятору С-файл с уже развёрнутыми #define #include директивами. Включите в проекте опцию "не удалять промежуточные файлы компиляции" и поищите среди временных файлов эти самые развёрнутые С-файлы. Могут называться *.i, *.ii, *.pre или как нибудь ещё - очень полезно на будущее при разборках с препроцессором.
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! 
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
никогда раньше не сталкивался с применением оператора "запятая", кроме как в списках полей инициализации переменных и в операторе for.
а тут, знакомясь с темами на форуме, увидел, что практикуется код типаможет мне кто-нибудь объяснить, в чем смысл такой записи, а так же вообще в чем смысл оператора "запятая" в подобных случаях?
т.е. в чем разница между разделением отдельных операторов точкой с запятой и только запятой?
что-то у меня возникает полная уверенность, что это очередной способ выстрелить себе в ногу...
а тут, знакомясь с темами на форуме, увидел, что практикуется код типа
Код: Выделить всё
if(condition) var1=a, var2=b, var3=c;т.е. в чем разница между разделением отдельных операторов точкой с запятой и только запятой?
что-то у меня возникает полная уверенность, что это очередной способ выстрелить себе в ногу...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Вопросы по С/С++ (СИ)
Вы немного "плаваете" в понятиях оператор (statement), операция (operator), выражение (expression).
Выражение (expression) завершённое символом ";" является оператором (statement). То есть
- это выражение (expression)
- это оператор (statement)
- это тоже выражение
а
- оператор.
пример использования выражения, содержащего запятую:
здесь - выражение.
Пример использования оператора вы привели сами. Вместо применения составного оператора, состоящего из трёх отдельных операторов
применён один оператор
То есть, симол "," в выражении является такой же (почти такой же:) ) операцией (operator), как и "+","-","=";
Выражение (expression) завершённое символом ";" является оператором (statement). То есть
Код: Выделить всё
var1=aКод: Выделить всё
var1=a;Код: Выделить всё
var1=a, var2=bа
Код: Выделить всё
var1=a, var2=b;пример использования выражения, содержащего запятую:
Код: Выделить всё
for(i=0; i<10; i++, j++)
arr1[i] = arr2[j];
здесь
Код: Выделить всё
i++, j++Пример использования оператора вы привели сами. Вместо применения составного оператора, состоящего из трёх отдельных операторов
Код: Выделить всё
{ var1=a; var2=b; var3 =c; }
применён один оператор
Код: Выделить всё
var1=a, var2=b, var3 =c;
То есть, симол "," в выражении является такой же (почти такой же:) ) операцией (operator), как и "+","-","=";
Последний раз редактировалось Const14 Пт окт 05, 2018 08:54:48, всего редактировалось 3 раза.
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: Вопросы по С/С++ (СИ)
Синтаксисом языка разрешено? Разрешено. Значит имеет право быть. Сейчас даже вот так разрешено
Код: Выделить всё
if(uint32_t x=10; condition) var1 = x, var2 = x*x, var3 = x*x+x;- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Const14, вы написали много чего, но ответа на мой вопрос не дали: в чем смысл подобных замен? в чем смысл выражения, состоящего из нескольких независимых выражений, если результатом такого составного выражения будет только одно значение, а остальные не востребуются?
Добавлено after 2 minutes 58 seconds:
да, как-то не привык разделять термины оператор и операция. согласен, корректно было спросить про операцию "запятая".
да и хрен бы с ним. вопрос - ЗАЧЕМ это разрешено синтаксисом? ведь какой-то смысл должен быть в каждой фиче?VladislavS писал(а):Значит имеет право быть
Добавлено after 2 minutes 58 seconds:
да, как-то не привык разделять термины оператор и операция. согласен, корректно было спросить про операцию "запятая".
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: Вопросы по С/С++ (СИ)
Чтобы использовать составные выражения там где синтаксисом предусмотрено ОДНО выражение.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
не понимаю
выходит, это сделано для того, чтобы увеличить количество вариантов допустить ошибку. ибо абсолютно просто без этого обойтись, не потеряв ни в чем!
выходит, это сделано для того, чтобы увеличить количество вариантов допустить ошибку. ибо абсолютно просто без этого обойтись, не потеряв ни в чем!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: Вопросы по С/С++ (СИ)
Нормальным программистам это позволяет "использовать составные выражения там где синтаксисом предусмотрено ОДНО выражение". А тебе да, для ошибок.
Может лучше Денниса Ритчи спросить?
Может лучше Денниса Ритчи спросить?
Re: Вопросы по С/С++ (СИ)
Вероятно Вы знаете, что есть такое понятие, как грамматика языка. В грамматику выражений языка C включена операция "," в частности для того, чтобы можно было использовать такие выражения в операторе цикла "for". Соответственно, везде, где язык допускает использовать выражения, они могут быть записаны без каких-либо ограничений. Это унификация. Но Вас никто не обязывает это делать.
Добавлено after 1 minute 44 seconds:
[uquote="VladislavS",url="/forum/viewtopic.php?p=3473371#p3473371"]Может лучше Денниса Ритчи спросить?[/uquote]
Вряд-ли это возможно. Он уже давно ушёл в мир иной.
Добавлено after 1 minute 44 seconds:
[uquote="VladislavS",url="/forum/viewtopic.php?p=3473371#p3473371"]Может лучше Денниса Ритчи спросить?[/uquote]
Вряд-ли это возможно. Он уже давно ушёл в мир иной.
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: Вопросы по С/С++ (СИ)
[uquote="Const14",url="/forum/viewtopic.php?p=3473374#p3473374"]Вряд-ли это возможно. Он уже давно ушёл в мир иной.[/uquote]Естественно, в переносном смысле. Благо он оставил прекрасные книги по языку, в которых любой хрюндель найдёт ответы на свои вопросы.
Последний раз редактировалось VladislavS Пт окт 05, 2018 09:16:07, всего редактировалось 1 раз.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Роман, при всём уважении, но у Вас похоже "зудит" при отсутствии активности на форуме. Вместо того, чтобы провести приятно время, занявшись каким-либо полезным и любимым делом, Вы очередной раз начинаете разводить демагогию.
PS: Прошу прощения, если форма моего сообщения была оскорбительной. Но иной, способной выразить мою мысль, в моей голове не сложилось.
----------
Тему почистил.
PS: Прошу прощения, если форма моего сообщения была оскорбительной. Но иной, способной выразить мою мысль, в моей голове не сложилось.
----------
Тему почистил.
Re: Вопросы по С/С++ (СИ)
Alex, позволю себе вернуть реплику по делу с небольшим изменением, которая, как мне кажется, была незаслуженно удалена вместе с мусором
Обычно си-программисты стремятся к минимизации исходного текста везде, где это возможно и где язык это позволяет. Например перестановка элементов массива, скажем при его сортировки, требует составного оператора из трёх операторов:
В данном примере кажется логичным представить составной оператор перестановки в виде одного:
На этом умолкаю.
Обычно си-программисты стремятся к минимизации исходного текста везде, где это возможно и где язык это позволяет. Например перестановка элементов массива, скажем при его сортировки, требует составного оператора из трёх операторов:
Код: Выделить всё
if( a[i]<b[j] )
{
t = a[i];
a[i] = b[j];
b[j] = t;
}
В данном примере кажется логичным представить составной оператор перестановки в виде одного:
Код: Выделить всё
if( a[i]<b[j] )
t = a[i], a[i] = b[j], b[j] = t;
На этом умолкаю.
Re: Вопросы по С/С++ (СИ)
В одну строку также можно написать.Const14 писал(а):В данном примере кажется логичным представить составной оператор перестановки в виде одного
Код: Выделить всё
if( a[i]<b[j] )
{t = a[i]; a[i] = b[j]; b[j] = t;}Re: Вопросы по С/С++ (СИ)
А не может ли быть так, что там играет роль то, что составной оператор возвращает значение, а группа, возможно, нет?
Но у меня тоже есть вопрос. Тут я всё пытаюсь разобраться, что является объектом, что описанием. С простыми переменными всё просто - уже более-менее научился. А вот как быть со структурами и объединениями. Пример:
как мне это описать в .h файле, чтобы другие знали, что есть такой test.flag.leadingzero?
Но у меня тоже есть вопрос. Тут я всё пытаюсь разобраться, что является объектом, что описанием. С простыми переменными всё просто - уже более-менее научился. А вот как быть со структурами и объединениями. Пример:
Код: Выделить всё
struct flag {
unsigned char dst_enable: 1; // вкл. перехода на летнее время
unsigned char leadingzero:1;
};
union {
unsigned char eflag;
struct flag fflag;
} test;
как мне это описать в .h файле, чтобы другие знали, что есть такой test.flag.leadingzero?
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
сам всегда делаю и другим советую: typedefuldemir писал(а):как мне это описать в .h файле, чтобы другие знали, что есть такой test.flag.leadingzero?
Код: Выделить всё
// файл my_defines.h
typedef struct {
unsigned char dst_enable: 1; // вкл. перехода на летнее время
unsigned char leadingzero:1;
} flag_t;
typedef union {
unsigned char eflag;
flag_t fflag;
} test_t;
extern test_t test;
// в одном из файлов пишется так
#include "my_defines.h"
test_t test;
// в остальных файлах только инклюдится my_defines.hДобавлено after 6 minutes 10 seconds:
кстати, многие компиляторы, например, GCC, поддерживают безымянные (анонимные) структуры и юнионы внутри структурных типов данных. то есть можно так
Код: Выделить всё
typedef union{
unsigned char as_byte;
struct{
unsigned char dst_enable: 1; // вкл. перехода на летнее время
unsigned char leadingzero:1;
}
} flag_t;
extern flag_t flag;Код: Выделить всё
flag.as_byte = 3;
flag.dst_enable = 0;
flag.leadingzero = 1;если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Вопросы по С/С++ (СИ)
[uquote="Const14",url="/forum/viewtopic.php?p=3476543#p3476543"]В данном примере кажется логичным представить составной оператор перестановки в виде одного:
[/uquote]
Тогда уж:
<мечтательно>Ещё бы t прямо здесь объявить ...</мечтательно>
Код: Выделить всё
if( a[i]<b[j] )
t = a[i], a[i] = b[j], b[j] = t;
Тогда уж:
Код: Выделить всё
if(a[i] < b[j])
b[j] = (t = a[i], a[i] = b[j], t);
<мечтательно>Ещё бы t прямо здесь объявить ...</мечтательно>
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! 