- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
#ifndef __MAKROS_H__
#define __MAKROS_H__
// ...
#define countof( array ) sizeof( array ) / sizeof( array[ 0 ] )
#define IS_CLUSTER( id ) id >= FIRST_CLUSTER_ID
#define CREATE_TEMP_FILE( autoclean_name, file_prefix ) \
char create_temp_file_file_mask[ MAX_PARAM_STR_LENGTH ]; \
snprintf( create_temp_file_file_mask, MAX_PARAM_STR_LENGTH, "%s/%sXXXXXX", config::tmp_path, file_prefix ); \
int create_temp_file_desc=mkstemp( create_temp_file_file_mask ); \
if(create_temp_file_desc<0) \
{ \
DEBUG_E( Interface, "Cannot create temporary file: %s\n", create_temp_file_file_mask ); \
ret=RET_CANTOPENFILE; \
CHECK_RET(sock, ret); \
return true; \
} \
close(create_temp_file_desc); \
autoclean autoclean_name( create_temp_file_file_mask );
#endif // __MAKROS_H__
govnomonad 02.04.2013 03:34 # +4
это были KDEшники?
bormand 02.04.2013 05:14 # 0
LispGovno 02.04.2013 08:00 # 0
>while (0)
Студия начнет выть про константы в условиях цикла.
defecate-plusplus 02.04.2013 09:30 # +1
do {} while (0); более чем распространенная схема, например, заменяющая кучку goto error;
TarasB 02.04.2013 09:55 # +3
bormand 02.04.2013 10:12 # +2
Чтобы вызов такого макро работал как вызов самой обычной функции, и требовал ";" после себя, а также нормально интегрировался с ифами и другими управляющими конструкциями. Классика макроебства же.
1) Все аргументы заворачиваем в круглые скобки
2) Если пишем выражение - оборачиваем всего макро круглые скобки
3) Если пишем стейтмент - оборачиваем его в do { ... } while (0)
> Студия начнет выть про константы в условиях цикла.
И пошла она нахуй со своим вытьем. Лучше бы полезные ворнинги показывала.
P.S. А с {} она всяко будет вопить про лишнюю ";".
P.P.S. На while (true) { ... if (x) break; ... } тоже воет? Если да - то говно эта ваша вижуалка.
LispGovno 02.04.2013 10:16 # 0
bormand 02.04.2013 10:17 # 0
Так тут же тоже константа в условии. Почему на тот случай она вопит а на этот нет? Вот срань то...
На while (true) { ... if (x) break; ... } тоже воет? Это ведь вполне нормальная конструкция. Да и нолик в условии\цикле, появившийся в результате макроэкспанда или вычисления констант тоже как бы нормальная практика.
defecate-plusplus 02.04.2013 10:21 # +1
bormand 02.04.2013 10:30 # 0
defecate-plusplus 02.04.2013 10:35 # +4
пока дерьмотюнинг не сделаешь -D_SCL_SECURE_NO_WARNINGS она и на /W3 будет изрыгать тонны проклятий в адрес std::copy
govnomonad 02.04.2013 11:42 # 0
В плюсах нет возможности отключить определенный ворнинг в определенном месте. Есть конечно pragma, но оно же прибито к крестокомпилятору
defecate-plusplus 02.04.2013 11:49 # 0
слава микрософту
suc-daniil 02.04.2013 17:56 # +2
TarasB 02.04.2013 15:23 # +3
bormand 02.04.2013 18:56 # +4
Вот у визуалки хороший компилятор - быстрый, код получается компактней чем у гцц. Простим уж ей неподдержку С99... Но с ворнингами у нее полная жопа. Те, которые надо, она не показывает. Ненужные - пожалуйста, тысячами. Вот кому нахуй сдались ворнинги про "устаревание" "небезопасных" сишных функций, и предложение взамен юзать анально огороженную замену от майкрософта? Кому интересны сотни ворнингов в хедерах самой визуалки? Даже опенсурсное gcc их по дефолту не показывает, зная, что никто их править не будет.
govnomonad 03.04.2013 04:44 # 0
а вот неподдерджку С++11 уже прощать не хочется. А в экспериментальной ветке gcc есть даже концепты
LispGovno 02.04.2013 07:59 # 0
Никак группу КРЕМАТОРИЙ переслушал? Притом такая редкая запись.
VseGovnoOdinYaKrut 02.04.2013 10:08 # +2
LispGovno 02.04.2013 10:17 # 0
Psionic 02.04.2013 10:28 # +2
orion 02.04.2013 14:06 # 0
>#define countof( array ) sizeof( array ) / sizeof( array[ 0 ] )
roman-kashitsyn 02.04.2013 14:15 # +2
defecate-plusplus 02.04.2013 14:22 # +1
roman-kashitsyn 02.04.2013 14:47 # +2
defecate-plusplus 02.04.2013 14:57 # 0
я про экранирование (array)
LispGovno 02.04.2013 14:59 # 0
Вот тут зачем вторые?
bormand 02.04.2013 15:00 # 0
LispGovno 02.04.2013 15:04 # 0