Как глубоко я могу определить #define? - PullRequest
6 голосов
/ 10 октября 2019

Мне нужно использовать #define и using = ; столько, сколько я могу, чтобы заменить, возможно, все в C ++ на эмодзи ?????.

Можно ли # определить препроцессоры, такие как #define ? #defineили хотя бы #define ? if, #define ? == и т. д.? Может быть, с помощью «using»?

Я хотел бы заменить операторы, инструкции основного языка ... Возможно ли это как-нибудь?

Я знаю, что вышеприведенное не работает, но, возможно, естьспособ? ... Пожалуйста, помогите мне сделать что-то смешное! : D

Ответы [ 2 ]

8 голосов
/ 10 октября 2019

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

В соответствии с комментарием Роменса я попробовал его, и вы также можете заменить имена методов на эмодзи.

В качестве подтверждения концепции следующий код компилируется в Visual Studio 2019 с инструментарием платформы v142.

#include <iostream>

#define ? int

? ?() {
    std::cout << "I'm ?!";

    return 1;
}

? main() {
    ?();
}

Или еще больше, чтобы включить некоторые комментарии:

#include <iostream>

#define ? using
#define ??‍ cout
#define ? int
namespace ? = std;
? ?::??‍;

? ?() {
    ??‍ << "I'm";
    ?::cout << "?!";

    return 1;
}

? main() {
    ?();
}

Также using - это нечто иное, чем #define. Вам понадобится только последний.

3 голосов
/ 10 октября 2019

Можно ли # определить препроцессоры, такие как #define define # define

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

или, по крайней мере, #define ?, если

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

Может быть с использованием 'using'?

Смайлики в равной степени разрешены для using, как и для макросов.


Обратите внимание, что любой идентификатор может быть смайликом (при условии, что они поддерживаются в первую очередь)) включая функции, типы и переменные. Пример:

struct ?? {};
struct ?? {};

int main() {
    ??{} == ??{};
}
...