- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
#include <stdio.h>
#include <stdlib.h>
#define DEREF(x) ({*(x);})
#define PTR(x) ({&(x);})
#define PTR_T(x) typeof(typeof(x) *)
#define DEREF_T(x) typeof( ({typeof(x) DEREF_T; *DEREF_T;}) )
void add5(PTR_T(int) a)
{
DEREF(a)+= 5;
}
int main(void)
{
int a = 0;
printf("%d\n", a);
add5(PTR(a));
printf("%d\n", a);
int b = 5;
PTR_T(b) b_p = PTR(b); // int *
printf("%d\n", DEREF(b_p) );
DEREF_T(b_p) c = 666; // int
printf("%d", c);
return EXIT_SUCCESS;
}
#define ASSIGN_AUTO(var_name, value) typeof(value) var_name = value;
Да, эти макросы можно так переписать
, и тогда это и в Clang соберется
А вот
не очень ясно как переписать без фигурных скобок.
Вот тут разыменования нуля быть не должно
Х.з., я не думаю, что конпеляторы настолько злые, что что-то оптимизируют внутри typeof или sizeof...
З.Ы. Ну разадресуй единичку, чтобы даже формально не доебались.
То ({a;}) это lvalue и оно нормально присваивает.
Clang же не считает такую хрень валидной:
error: expression is not assignable
Чтобы свести задачу к уже решённой в этом треде.
Хотя вот кажется в MSVC препроцессор и компилятор в один бинарь запихали. Ну а что еще можно было ждать от мелкомягких?
gcc и cpp просто вызывают cc1 с разными параметрами.
Да, похоже что так. Там даже отдельная опция для раздельного препроцессирования-компилирования есть
-no-integrated-cpp
Perform preprocessing as a separate pass before compilation. By default, GCC performs preprocessing as an integrated part of input tokenization and parsing. If this option is provided, the appropriate language front end (cc1, cc1plus, or cc1obj for C, C++, and Objective-C, respectively) is instead invoked twice, once for preprocessing only and once for actual compilation of the preprocessed input. This option may be useful in conjunction with the -B or -wrapper options to specify an alternate preprocessor or perform additional processing of the program source between normal preprocessing and compilation.
Ну а что ещё можно было ждать от гнутых?
Вот тут всё описано:
https://gcc.gnu.org/onlinedocs/gccint/
.java файлы нифига не запускаются ``java``
.mc файлы нифига не запускаются ``mc``
в юниксе нет логики
Кстати, с этим связана интересная фишка, с которой я недавно столкнулась при портировании кода под линукс.
В MSVC имя функции это литерал. А в остальных конпеляторах это локальный массив, как и требует стандарт. В итоге в MSVC имя можно было конкатенировать с чем-то ещё, а в других конпеляторах -- нет.
В MSVC же выебнулись и сделали его псевдо-макросом, который раскрывается в литерал. Что, конечно, удобнее.
И это определенно добавит ебли всяким инструментам для стат. анализа, которые код после препроцессора должны хавать
Интересно, что решарпер как-то умеет макросы во время стат анализа (думмется мне, ему clang помогает)
Какая абстракция )))
но оба заменяют __LINE__
Ну тут всё по стандарту, гцц тоже заменяет лайн и файл.
Ня нужен. Это древнее нястандартное расширение. Правильные девочки-волшебняцы использнуют "__func__" (который по Стандарту ня макрос, кстати).
И что он покажет с этой вот __FUNCTION__ ": " ?
https://docs.microsoft.com/ru-ru/cpp/preprocessor/predefined-macros?view=msvc-160
__FUNCTION__ определяется как строковый литерал, содержащий недекорированное имя включающей функции. Макрос определен только в пределах функции. Макрос __FUNCTION__ не разворачивается, если используется параметр компилятора /EP или /P . Пример использования см. в разделе для макроса __FUNCDNAME__.
Про /E там ничего не сказано.
Препроцессор GCC эту __FUNCTION__ ни во что не раскрывает т.к. языка Си он не знает
Ну все чудеса завязаны на typeof. По-моему уже обсуждали это и сошлись что неплохо бы завести его в стандарт.
Который потом всякая анскильная шваль и своровала для своей дrustни.
https://t.me/tzar_blog
Можно брутом номера поста посмотреть всю ленту. Странно, похоже на канал, а кнопки «Preview channel» нет.
Кстати: «Roman». Доцента СФУ тоже зовут Романом. Это всё-таки он?
Какая секурность )))
Кстати Царь-то в последнее время не настоящий.
Он крестился, у него изменился сленг, да и прежняя искра пропала куда-то.
Отдельно открытый iframe с той сраницы в зависимости от PHP_REMOTE_ADDR показывает либо текст выше, либо нагло пездит
Channel with username @proriv_zaparti2 not found
И для разных айпишников он отдаёт разный конь-тент?
Не. Это похоже группа (кнопка View In Group ), и посты от разных авторов.
Почему они так некокококонсистентно сделали: каналы показывают в браузере целиком, а из группы только отдельные посты?
Вот это тоже есть если смотреть с адреса, который в уголке дурова не помечен как «арбузный»