- 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;
}
j123123 21.06.2021 22:38 # +3
#define ASSIGN_AUTO(var_name, value) typeof(value) var_name = value;
bormand 21.06.2021 23:03 # +1
j123123 21.06.2021 23:22 # +2
Да, эти макросы можно так переписать
, и тогда это и в Clang соберется
А вот
не очень ясно как переписать без фигурных скобок.
bormand 21.06.2021 23:29 # +1
j123123 21.06.2021 23:53 # 0
Вот тут разыменования нуля быть не должно
bormand 21.06.2021 23:57 # 0
Х.з., я не думаю, что конпеляторы настолько злые, что что-то оптимизируют внутри typeof или sizeof...
З.Ы. Ну разадресуй единичку, чтобы даже формально не доебались.
bormand 22.06.2021 00:02 # +2
npopa6 22.06.2021 06:31 # 0
j123123 21.06.2021 23:30 # +1
То ({a;}) это lvalue и оно нормально присваивает.
Clang же не считает такую хрень валидной:
error: expression is not assignable
ASD_77 22.06.2021 13:06 # 0
j123123 22.06.2021 17:39 # +1
bormand 22.06.2021 17:52 # 0
j123123 22.06.2021 18:07 # 0
bormand 22.06.2021 18:10 # +1
Чтобы свести задачу к уже решённой в этом треде.
j123123 22.06.2021 18:40 # 0
Хотя вот кажется в MSVC препроцессор и компилятор в один бинарь запихали. Ну а что еще можно было ждать от мелкомягких?
DypHuu_niBEHb 22.06.2021 18:43 # 0
j123123 22.06.2021 18:55 # 0
npopa6 22.06.2021 18:58 # 0
gcc и cpp просто вызывают cc1 с разными параметрами.
j123123 22.06.2021 19:11 # +2
Да, похоже что так. Там даже отдельная опция для раздельного препроцессирования-компилирования есть
-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.
npopa6 22.06.2021 18:56 # +2
Ну а что ещё можно было ждать от гнутых?
j123123 22.06.2021 19:08 # +2
npopa6 22.06.2021 19:13 # 0
Вот тут всё описано:
https://gcc.gnu.org/onlinedocs/gccint/
bormand 22.06.2021 18:43 # 0
DypHuu_niBEHb 22.06.2021 18:46 # +2
.java файлы нифига не запускаются ``java``
.mc файлы нифига не запускаются ``mc``
в юниксе нет логики
bormand 22.06.2021 18:53 # 0
Кстати, с этим связана интересная фишка, с которой я недавно столкнулась при портировании кода под линукс.
В MSVC имя функции это литерал. А в остальных конпеляторах это локальный массив, как и требует стандарт. В итоге в MSVC имя можно было конкатенировать с чем-то ещё, а в других конпеляторах -- нет.
npopa6 22.06.2021 18:57 # 0
bormand 22.06.2021 18:58 # +1
DypHuu_niBEHb 22.06.2021 19:01 # 0
npopa6 22.06.2021 19:06 # 0
bormand 22.06.2021 19:14 # +1
В MSVC же выебнулись и сделали его псевдо-макросом, который раскрывается в литерал. Что, конечно, удобнее.
bormand 22.06.2021 19:17 # 0
j123123 22.06.2021 22:11 # +2
И это определенно добавит ебли всяким инструментам для стат. анализа, которые код после препроцессора должны хавать
DypHuu_niBEHb 22.06.2021 22:19 # 0
Интересно, что решарпер как-то умеет макросы во время стат анализа (думмется мне, ему clang помогает)
bormand 22.06.2021 22:20 # 0
Какая абстракция )))
DypHuu_niBEHb 22.06.2021 22:25 # 0
но оба заменяют __LINE__
bormand 22.06.2021 22:27 # 0
Ну тут всё по стандарту, гцц тоже заменяет лайн и файл.
PolinaAksenova 22.06.2021 22:56 # 0
Ня нужен. Это древнее нястандартное расширение. Правильные девочки-волшебняцы использнуют "__func__" (который по Стандарту ня макрос, кстати).
j123123 22.06.2021 22:24 # 0
И что он покажет с этой вот __FUNCTION__ ": " ?
https://docs.microsoft.com/ru-ru/cpp/preprocessor/predefined-macros?view=msvc-160
__FUNCTION__ определяется как строковый литерал, содержащий недекорированное имя включающей функции. Макрос определен только в пределах функции. Макрос __FUNCTION__ не разворачивается, если используется параметр компилятора /EP или /P . Пример использования см. в разделе для макроса __FUNCDNAME__.
Про /E там ничего не сказано.
Препроцессор GCC эту __FUNCTION__ ни во что не раскрывает т.к. языка Си он не знает
bormand 22.06.2021 23:00 # 0
DypHuu_niBEHb 22.06.2021 18:59 # 0
npopa6 22.06.2021 19:09 # 0
DypHuu_niBEHb 22.06.2021 19:15 # 0
3.14159265 10.08.2021 21:49 # +1
Ну все чудеса завязаны на typeof. По-моему уже обсуждали это и сошлись что неплохо бы завести его в стандарт.
COPOKA 10.08.2021 21:54 # +1
3.14159265 10.08.2021 22:08 # 0
Который потом всякая анскильная шваль и своровала для своей дrustни.
3.14159265 10.08.2021 22:11 # +1
COPOKA 10.08.2021 22:16 # +1
j123123 11.08.2021 01:07 # +2
j123123 10.08.2021 22:51 # +1
j123123 10.08.2021 22:56 # 0
https://t.me/tzar_blog
COPOKA 10.08.2021 23:01 # +1
COPOKA 10.08.2021 23:05 # +1
Можно брутом номера поста посмотреть всю ленту. Странно, похоже на канал, а кнопки «Preview channel» нет.
Кстати: «Roman». Доцента СФУ тоже зовут Романом. Это всё-таки он?
j123123 10.08.2021 23:10 # +1
Какая секурность )))
Hacpy 10.08.2021 23:13 # 0
COPOKA 10.08.2021 23:29 # 0
3.14159265 10.08.2021 23:33 # 0
Кстати Царь-то в последнее время не настоящий.
Он крестился, у него изменился сленг, да и прежняя искра пропала куда-то.
Hacpy 10.08.2021 23:58 # 0
Отдельно открытый iframe с той сраницы в зависимости от PHP_REMOTE_ADDR показывает либо текст выше, либо нагло пездит
Channel with username @proriv_zaparti2 not found
COPOKA 11.08.2021 00:00 # +1
И для разных айпишников он отдаёт разный конь-тент?
Hacpy 11.08.2021 00:16 # +1
3.14159265 10.08.2021 23:29 # +2
Не. Это похоже группа (кнопка View In Group ), и посты от разных авторов.
COPOKA 10.08.2021 23:31 # +1
Почему они так некокококонсистентно сделали: каналы показывают в браузере целиком, а из группы только отдельные посты?
3.14159265 10.08.2021 23:33 # +2
j123123 11.08.2021 02:47 # +2
Hacpy 10.08.2021 23:56 # +1
Вот это тоже есть если смотреть с адреса, который в уголке дурова не помечен как «арбузный»