С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 20.11.2019
Сообщений: 37

define и typedef

29.04.2022, 19:45. Показов 1169. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Хотел задефайнить русскими словами абсолютно все. Столкнулся с проблемой. Точка с запятой, скобки и остальные похожие знаки просто не дефайнятся, выдают ошибку [Error] macro names must be identifiers. Можно ли как-то все таки сделать это? И еще: typedef слово int, как и typedef int слово - не работают, ошибка та же. Как исправить?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.04.2022, 19:45
Ответы с готовыми решениями:

Проблема с define и typedef
Объясните мне пожалуйста, товарищи... В чем смысл объявлять такие дурацкие дефайны кто это делает? и таких бессмысленных дефайнов, просто...

Что лучше использовать, #define или typedef?
Вот привожу пример программы. Здесь можно и с #define сделать и с typedef. Программа в любом случае будет прекрасно работать. Там что же...

Typedef void F(); typedef для типа функции через идентификатор
Здравствуйте цитата из typedef MSDN в интернете мне удалось нарыть только один конкретный пример: class A { typedef void F(); ...

11
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12930 / 6798 / 1820
Регистрация: 18.10.2014
Сообщений: 17,205
29.04.2022, 20:20
Цитата Сообщение от Temchick Посмотреть сообщение
Точка с запятой, скобки и остальные похожие знаки просто не дефайнятся ... Можно ли как-то все таки сделать это?
Что именно "это"?

Цитата Сообщение от Temchick Посмотреть сообщение
И еще: typedef слово int, как и typedef int слово - не работают
Так а почему вы решили, что ваш компилятор вообще поддерживает использование кириллицы в идентификаторах?
0
0 / 0 / 0
Регистрация: 20.11.2019
Сообщений: 37
29.04.2022, 20:24  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Что именно "это"?
Задефайнить точку с запятой вообще
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Так а почему вы решили, что ваш компилятор вообще поддерживает использование кириллицы в идентификаторах
Я проверил на некоторых других идентификаторах, все работало нормально с кириллицей...
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12930 / 6798 / 1820
Регистрация: 18.10.2014
Сообщений: 17,205
29.04.2022, 20:32
Цитата Сообщение от Temchick Посмотреть сообщение
Задефайнить точку с запятой вообще
Имя макроса должно быть идентификатором. Оно не может быть точкой с запятой. Оно не может содержать точку с запятой. Собственно это вам уже и сказало сообщение об ошибке.

Цитата Сообщение от Temchick Посмотреть сообщение
Я проверил на некоторых других идентификаторах, все работало нормально с кириллицей...
Ну тогда приводите пример кода с вашим typedef int слово и точное сообщение об ошибке. Почему все это не приведено сразу в вопросе?
0
Гвоздь Задиров
 Аватар для Folian
1718 / 1117 / 337
Регистрация: 25.01.2019
Сообщений: 2,940
29.04.2022, 20:35
Цитата Сообщение от Temchick Посмотреть сообщение
абсолютно все.
Громкое заявление.

Пишы интерпретатор, а не дефайнами балуйся.
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,989
Записей в блоге: 32
29.04.2022, 20:38
Цитата Сообщение от Temchick Посмотреть сообщение
Хотел задефайнить русскими словами абсолютно все.
Сделайте собственный текстовый препроцессор с таблицей замены, переводящий ваши записи в валидный Си-кот и пишите хоть иероглифами

Добавлено через 1 минуту
Цитата Сообщение от Folian Посмотреть сообщение
Пишы интерпретатор, а не дефайнами балуйся.
Интерпретатор я например предлагал писать в теме по ссылке в моей подписи - никто не изъявил желания
0
Гвоздь Задиров
 Аватар для Folian
1718 / 1117 / 337
Регистрация: 25.01.2019
Сообщений: 2,940
29.04.2022, 20:38
Цитата Сообщение от Folian Посмотреть сообщение
интерпретатор
не то слово, наверное, ляпнул;
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,989
Записей в блоге: 32
29.04.2022, 20:40
Вангую, имелся в виду препроцессор
1
Гвоздь Задиров
 Аватар для Folian
1718 / 1117 / 337
Регистрация: 25.01.2019
Сообщений: 2,940
29.04.2022, 20:47
да, точно не то слово. Имел в виду именно замену синтаксиса в входном файле с последующей компиляцией
Цитата Сообщение от _Ivana Посмотреть сообщение
Вангую, имелся в виду препроцессор
Ага, похоже на то.
Ща даж попробую.

Добавлено через 1 минуту
Цитата Сообщение от Folian Посмотреть сообщение
Ща даж попробую
Но на один файлик, никаких линковщиков;
1
Гвоздь Задиров
 Аватар для Folian
1718 / 1117 / 337
Регистрация: 25.01.2019
Сообщений: 2,940
29.04.2022, 22:55
Ну шо, я поигрался; эт было интересно.
Всплыли подводные кирпичи, но, видимо, эт только мелководье.
Глубже не полезу.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <fstream>
#include <string>
#include <map>
 
std::size_t replace_all(std::string& inout, std::string_view what, std::string_view with); /*эт я на цппреф спёр*/
 
int main(int argc, char* argv[])
{
    if(!--argc)
        return 0;
    if(std::ifstream file(argv[1]); file.is_open())
    {
        std::string outname { argv[1] };
        outname += ".cpp";
        if(std::ofstream cpp(outname, std::ios::trunc); cpp.is_open())
        {
            std::map<std::string, std::string> dict { /*ваще эт надо из файла дёргать, но так наглядней и мне лень*/
                {"хеловорд програм", "#include <iostream> \n int main() { std::cout << \"ZDarova\"; return 0; }"},
                {"впихнуть", "#include"},
                {"консольный тудасюда", "<iostream>"},
                {"целоэ", "int"},
                {"главная!", "main"},
                {"Цкобка", "("},
                {"цкобка", ")"},
                {"Зкобка", "{"},
                {"зкобка", "}"},
                {"штука", ";"},
                {"Сдача", "return"},
                {"вывод", "std::cout"},
                {"сдвиг сюда", "<<"},
                {"сдвиг туда", ">>"},
 
            };
 
            std::string current_str;
            while(std::getline(file, current_str))
            {
                /*ой, во что я влез; ща начнётся трэш с коллизиями*/
                /*эт надо будет мапе сказать шоб сортировала по длине строк
                    и хорошо если только исключительно кириллица.
                    и чтоб между кавычек всякое пропускало тож.
                    ёклмн.
                */
                for(const auto& dpair : dict)
                    replace_all(current_str, dpair.first, dpair.second);
                cpp << current_str << "\n";
            }
        }
 
        std::string compile { "g++ " + outname + " -o " + argv[1] + ".exe" };
        system(compile.c_str());
    }
 
    return 0;
}
 
std::size_t replace_all(std::string& inout, std::string_view what, std::string_view with)
{
    std::size_t count{};
    for (std::string::size_type pos{};
         inout.npos != (pos = inout.find(what.data(), pos, what.length()));
         pos += with.length(), ++count) {
        inout.replace(pos, what.length(), with.data(), with.length());
    }
    return count;
}
fx:
Code
1
2
3
4
5
6
7
8
впихнуть консольный тудасюда
 
целоэ главная!Цкобкацкобка
Зкобка
    целоэ X Зкобка 1243 зкобка штука
    вывод сдвиг сюда "Helavord" сдвиг сюда X штука
    Сдача 0 штука
зкобка
fx.cpp:
C++
1
2
3
4
5
6
7
8
#include <iostream>
 
int main()
{
    int X { 1243 } ;
    std::cout << "Helavord" << X ;
    return 0 ;
}
Работает конкретно в моих виндах, вышито через котоблокс.
И гцц у меня в пазах виндов прописан.
Миниатюры
define и typedef  
3
0 / 0 / 0
Регистрация: 20.11.2019
Сообщений: 37
30.04.2022, 04:58  [ТС]
Интересный способ. Только объясните, как запускать, я не совсем понял, т.к. работу с файлами не знаю.
0
Гвоздь Задиров
 Аватар для Folian
1718 / 1117 / 337
Регистрация: 25.01.2019
Сообщений: 2,940
30.04.2022, 13:17
Цитата Сообщение от Temchick Посмотреть сообщение
Только объясните, как запускать
чот ты меня растерял.
Ну ежли побаловаться, можешь пока выкинуть две строчки
Code
1
2
std::string compile { "g++ " + outname + " -o " + argv[1] + ".exe" };
        system(compile.c_str());
Делаешь с этого кода ехешник.
Кладёшь рядом с ехешником файл с неправильным синтаксисом.
Запускаешь ехешник с аргументом "название файла с неправильным синтаксисом", рядом должен возникнуть цпп с правильным синтаксисом.

А в тех двух строчках создаётся команда "скомпилируй файл, который только что создали" и скармливается в систему. Тут можешь как нравится делать.


ЗЫ: если дальше играться будешь - dict лучше, наверное, делать мультимапом с таким компаратором:
C++
1
2
3
4
5
6
7
struct Str_len_comp
{
    constexpr bool operator()(std::string_view a, std::string_view b) const
    {
        return a.size() > b.size();
    }
};
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.04.2022, 13:17
Помогаю со студенческими работами здесь

Зачем в WinApi так много #define, typedef?
Зачем в WinApi так много #define, typedef? Например, в minwindef.h есть строка: typedef int BOOL; Зачем, если можно обойтись...

Чем отличается define и typedef в контексте создания синонима для типа?
Чем отличается define и typedef в контексте создания синонима для типа? #define IntVector1 vector&lt;int&gt; typedef vector&lt;int&gt;...

не понимаю typedef struct define
1) В чем принципиальная разница между #define char T typedef char N; И когда используют? 2) Структура с использованием...

Без использования typedef все работает. При добавлении typedef — более 100 ошибок
Есть программа, с описанием структуры и функций, работающими с ней. Без использования typedef все работает. При добавлении typedef - более...

Как реализовать директиву #define для создания шаблона отпределения #define ?
Здравствуйте уважаемые. При написании программы появилась необходимость задать шаблон создания #define через #define (извините за...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru