- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
#include <stdio.h>
int main() {
switch (3) {
for (int i = 3; i > 0; --i) {
case 3: printf("%d ololo?\n", i);
}
}
return 0;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+1
#include <stdio.h>
int main() {
switch (3) {
for (int i = 3; i > 0; --i) {
case 3: printf("%d ololo?\n", i);
}
}
return 0;
}
О сколько нам открытий чудных
Готовит просвящения духх...
Угодайте, что там: https://ideone.com/zbOzGZ
+2
if (!(fs_info->workers && fs_info->delalloc_workers &&
fs_info->submit_workers && fs_info->flush_workers &&
fs_info->endio_workers && fs_info->endio_meta_workers &&
fs_info->endio_meta_write_workers &&
fs_info->endio_write_workers && fs_info->endio_raid56_workers &&
fs_info->endio_freespace_worker && fs_info->rmw_workers &&
fs_info->caching_workers && fs_info->readahead_workers &&
fs_info->fixup_workers && fs_info->delayed_workers && // <===
fs_info->fixup_workers && fs_info->extent_workers && // <===
fs_info->qgroup_rescan_workers)) {
err = -ENOMEM;
goto fail_sb_buffer;
}
https://bugzilla.kernel.org/show_bug.cgi?id=82021+1
/* Get LDAC handle */
LDACBT_API HANDLE_LDAC_BT ldacBT_get_handle( void )
/* Free LDAC handle */
LDACBT_API void ldacBT_free_handle( HANDLE_LDAC_BT hLdacBT )
/* Close LDAC handle */
LDACBT_API void ldacBT_close_handle( HANDLE_LDAC_BT hLdacBT )
/* Get ERROR CODE */
LDACBT_API int ldacBT_get_error_code( HANDLE_LDAC_BT hLdacBT )
/* Get Configured Sampling frequency */
LDACBT_API int ldacBT_get_sampling_freq( HANDLE_LDAC_BT hLdacBT )
СОНЭ умеет в комментарии.
https://android.googlesource.com/platform/external/libldac/+/master/src/ldacBT_api.c
+2
#include <malloc.h>
#include <string.h>
void print( void **p, int n ) {
int i = 0;
for(; i < n; ++i ) {
printf( "%x ", *( p + i ) );
}
printf( "\n" );
}
void get( void** pp, void** p ) {
*p = *pp;
}
void set( void** pp, void **p ) {
*pp = *p;
}
int main() {
printf( "sizeof: void* = %d, void** = %d\n", sizeof( void* ), sizeof( void** ) );
void ** pv = malloc( sizeof( void* ) * 8 ), **pp2;
memset( pv, 1, 8 * sizeof( void* ) );
printf( "pv = %x\n", pv );
print( pv, 8 );
pp2 = pv + 2 * sizeof( void** );
void *p = (void*)0x01020304c, *p2 = p;
*pp2 = p;
printf( "pv = %x, pp2 = %x, p=%x, p2 = %x\n", pv, pp2, p, p2 );
get( pv + 1, &p );
printf( "result get( pv + 1, &p ) -> *( pv + 1 ) = %x, p = %x\n", *( pv + 1 ), p );
set( pv + 2, &p2 );
printf( "result set( pv + 2 *, p2 ) -> *( pv + 2 ) = %x, p2 = %x\n", *( pv + 2 ), p2 );
print( pv, 8 );
free( pv );
return 0;
}
Просто оставлю это здесь, на будущее.
О том, как работать с void**.
0
#define double 1
#define float 2
#if REAL==float
#define fft_create_arrays f_fft_create_arrays
#define getx f_getx
#define fft f_fft
#define invfft f_invfft
#define normalize_fft f_normalize_fft
#define fft1n f_fft1n
#define fftn f_fftn
#define invfftn f_invfftn
#define realfftmag f_realfftmag
#define normalize_fftn f_normalize_fftn
#endif
#undef double
#undef float
https://github.com/borsboom/vocoder/blob/master/fft.h
−3
//+-------------------------------------------------------------------------
//
// Function: GetNumberOfType
// SetNumberOfType
//
// Synopsis: Helpers to get/set an integer value of given variant type
// by dereferencing a pointer
//
// pv - pointer to dereference
// vt - variant type
//
//--------------------------------------------------------------------------
// BUGBUG: The VC 5 compiler flags this as an error because VT_BOOL4 is not
// a valid VARENUM value. Disable the warning for now.
#pragma warning(disable:4063) // case '254' is not a valid value for switch of enum 'VARENUM'
long
GetNumberOfType (void * pv, VARENUM vt)
{
switch(vt)
{
case VT_I2:
case VT_BOOL:
return * (SHORT*) pv;
case VT_I4:
case VT_BOOL4:
return * (LONG*) pv;
default:
Assert(FALSE);
return 0;
}
}
void
SetNumberOfType (void * pv, VARENUM vt, long l)
{
switch(vt)
{
case VT_BOOL:
l = l ? VB_TRUE : VB_FALSE;
// vvvvvvvvvvv FALL THROUGH vvvvvvvvvvvvv
case VT_I2:
Assert(l >= SHRT_MIN && l <= SHRT_MAX);
* (SHORT*) pv = SHORT(l);
break;
case VT_BOOL4:
l = l ? VB_TRUE : VB_FALSE;
// vvvvvvvvvvv FALL THROUGH vvvvvvvvvvvvv
case VT_I4:
* (LONG_UNALIGNED *) pv = l;
break;
default:
Assert(FALSE);
}
}
Опять какая-то сранина известно откуда.
+4
DWORD NEAR _fastcall RgbCompare(RGBQUAD rgb1, RGBQUAD rgb2)
{
DWORD sum=0;
//
// lets do some majic shit so the compiler generates "good" code.
//
#define SUMSQ(a,b) \
if (a > b) \
sum += (WORD)(a-b) * (WORD)(a-b); \
else \
sum += (WORD)(b-a) * (WORD)(b-a);
SUMSQ(rgb1.rgbRed, rgb2.rgbRed);
SUMSQ(rgb1.rgbGreen, rgb2.rgbGreen);
SUMSQ(rgb1.rgbBlue, rgb2.rgbBlue);
return sum;
}
Как сложно, оказывается, посчитать (a-b)² на Си. Нужно каждый раз писать макрос для этой операции...
0
Ну и полный пример:
#include "stdafx.h"
#include "windows.h"
#include "iostream.h"
#include "process.h" // специально для потока
void fThredFunct1(void* pv); // декларация функции потока
__declspec(thread) DWORD dwTlsIndex; // локальная статическая функция для потока
void main()
{
ULONG hThread1 = 0; // Идентификатор потока 1
ULONG hThread2 = 0; // Идентификатор потока 2
//unsigned long _beginthread( void( __cdecl *start_address )( void * ),
// unsigned stack_size, void *arglist );
hThread1 = _beginthread(fThredFunct1,0,NULL); // создали первый поток
if (hThread1==-1)
cout << "Error create thread" << endl;
hThread2 = _beginthread(fThredFunct1,0,NULL); // создали второй поток
if (hThread1==-2)
cout << "Error create thread" << endl;
Sleep(2000); // ждем
}
void fThredFunct1(void* pv) // реализация функции потока
{
dwTlsIndex=TlsAlloc(); // Запросить индекс
if (dwTlsIndex==-1) // проверить на ошибку
{
cout << "Error TlsAlloc " << endl;
return;
}
cout << dwTlsIndex << endl;
Sleep(1000);
if ( TlsFree( dwTlsIndex)==0 ) // освободить индекс
{
cout << "Error TlsFree" << endl;
return;
}
}
Многопоточное говно
Гуглояндексится.
−4
https://docs.microsoft.com/en-us/windows/desktop/api/winsock/nf-winsock-wsaasyncselect
int WSAAsyncSelect(
SOCKET s,
HWND hWnd,
u_int wMsg,
long lEvent
);
/*
hWnd
A handle that identifies the window that will receive a message when a network event occurs.
*/
Почему виндовые асинхронные (или правильно говорить "небликирующиеся") сокеты так черезжопно сделаны? Нафига им через HWND надо месседжи слать? Что, другого способа нет для оповещений?
Требовать для работы асинхронных сокетов чтоб какое-то окно было это как требовать зубную щетку для входа в туалет чтоб посрать
−1
#include <stdio.h>
#include <inttypes.h>
int main(void) {
float a = 0;
float b = -9.8 * 0;
uint32_t* pa = (void*)&a;
uint32_t* pb = (void*)&b;
printf("%li %li %i %f %f\n",pa[0] , pb[0], pb[0]>>31, b+0, b);
return 0;
}
Нолик со взведенным знаковым битом. Вот зачем он нужен?