- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
#include <iostream>
using namespace std;
int main () {
for( struct {int i; long i2;} x = {1, 1};
x.i2 <= 100;
x.i++, x.i2 = x.i * x.i ) {
cout << x.i2 << endl;
}
return 0;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
Всего: 11
+166
#include <iostream>
using namespace std;
int main () {
for( struct {int i; long i2;} x = {1, 1};
x.i2 <= 100;
x.i++, x.i2 = x.i * x.i ) {
cout << x.i2 << endl;
}
return 0;
}
Поскольку реального ГК нет, добавлю синтетического.
NB: Под MSVC такое не пройдет. g++ - ok: http://codepad.org/JesKsnMQ
http://jia3ep.blogspot.com/2010/07/struct-in-for-loop.html
+166
// say this is some existing structure. And we want to use
// a list. We can tell it that the next pointer
// is apple::next.
struct apple {
int data;
apple * next;
};
// simple example of a minimal intrusive list. Could specify the
// member pointer as template argument too, if we wanted:
// template<typename E, E *E::*next_ptr>
template<typename E>
struct List {
List(E *E::*next_ptr):head(0), next_ptr(next_ptr) { }
void add(E &e) {
// access its next pointer by the member pointer
e.*next_ptr = head;
head = &e;
}
E * head;
E *E::*next_ptr;
};
int main() {
List<apple> lst(&apple::next);
apple a;
lst.add(a);
}
c++ страшный язык :) (часть вторая)
C++: Pointer to class data member: http://stackoverflow.com/questions/670734/c-pointer-to-class-data-member
Такие конструкции "E *E::*next_ptr;" без подготовки не осилить.
+163
#include <stdio.h>
const int (&getArray())[10] {
static int tmp[10] = {1,2,3,4,5,6,7,8,9,10};
return tmp;
}
void foo(const int (&refArr)[10])
{
size_t size = sizeof(refArr); // returns 10*sizeof(int)
printf ("Array size: %d\r\n", size);
}
int main() {
foo(getArray());
printf ("%d", getArray()[0]);
for (size_t i=1; i<sizeof(getArray())/sizeof(getArray()[0]); ++i)
printf (",%d", getArray()[i]);
return 0;
}
http://codepad.org/rPl6b7IS
c++ страшный язык :)
Извращения на тему: http://heifner.blogspot.com/2005/06/c-reference-to-array.html
+162
setGeometry((int)(QApplication::desktop()->width() -
(QApplication::desktop()->width() -
(QApplication::desktop()->width() / 2)) * 1.5) / 2,
(int)(QApplication::desktop()->height() -
(QApplication::desktop()->height() -
(QApplication::desktop()->height() / 2)) * 1.5) / 2,
(int)((QApplication::desktop()->width() -
(QApplication::desktop()->width() / 2)) * 1.5),
(int)((QApplication::desktop()->height() -
(QApplication::desktop()->height() / 2)) * 1.5));
Center app window!
+150
nPosition = !bInvert ? data->pos_back
: data->pos_front;
+158
std::string get(const std::string& name) {
NamedPropertyMap::iterator it = properties.find(name);
if (it == properties.end())
return false;
std::string ret;
it->second->Get(ret);
return ret;
}
return false; компилится на ура в VS2008
+159
m_hSemaphore = CreateSemaphore( NULL, 1, 1, NULL );
....
void CTestGUIDlg::OnBnClickedButtonStartStream()
{
WaitForSingleObject(m_hSemaphore, INFINITE);
if(m_ThreadHandle)
{
AfxMessageBox("Stop running stream!", MB_ICONEXCLAMATION);
return;
};
m_ThreadHandle = NULL;
m_StreamType = 1;
m_ThreadHandle = (HANDLE)_beginthreadex(NULL,
0,
streamProcedure,
static_cast<LPVOID>( this ),
0,
NULL);
if(!m_ThreadHandle)
{
m_StreamType = 0;
}
UpdateButtons();
ReleaseSemaphore(m_hSemaphore, 1, NULL);
}
классика жанра
+161
class SomeClass
{
public:
__declspec(dllexport) SomeClass(UINT i_Width, UINT i_Height, UINT i_Lines, float i_Result, bool i_bAutoFill = false, и т.д. еще штук 5);
__declspec(dllexport) SomeClass::~SomeClass();
__declspec(dllexport) void setCallbackFunction(void (*i_pCallbackFunction)(SomeClass* i_pSomeClass)) { m_pCallbackFunction = i_pCallbackFunction; };
__declspec(dllexport) bool isFinished() { return m_bIsFinished; };
__declspec(dllexport) void clear() { m_ResultData.clear(); };
__declspec(dllexport) bool save(const char* i_sFilename);
...
private:
bool createThread();
void initWork();
void loopWork();
void stepWork();
void exitWork();
static UINT WINAPI workProc(LPVOID lpContext);
inline bool someInlineFunction(UINT i_Index);
...
private:
HANDLE m_ThreadHandle;
bool m_bIsFinished;
bool m_bThreadStopped;
bool m_bThreadClosed;
vector<SomeType> m_a...;
string m_sFilename;
void (*m_pCallbackFunction)(SomeClass* i_pSomeClass);
...
};
Это краткий пересказ того, что шло вместе с DLL, только длиннее и с комментариями к каждой строке и доксигеновской докой!
+161
/////////////////////////////////////////////////////////////////////////////
#define TWAIT(_WAIT_EXPR_, _TIMEOUT_) TWAIT_EX(_WAIT_EXPR_, _TIMEOUT_, 0)
#define TWAIT_(_WAIT_EXPR_, _TIMEOUT_) TWAIT_EX_(_WAIT_EXPR_, _TIMEOUT_, 0)
/////////////////////////////////////////////////////////////////////////////
#define TWAIT_DECL_VARS \
DWORD TWAIT_START = GetTickCount(); \
bool TWAIT_RET = true;
/////////////////////////////////////////////////////////////////////////////
#define TWAIT_EX(_WAIT_EXPR_, _TIMEOUT_, _ABORT_) \
DWORD TWAIT_START = GetTickCount(); \
bool TWAIT_RET = true; \
do {ProcessMessage(1); \
TWAIT_RET = GetTickCount() - TWAIT_START < (DWORD)(_TIMEOUT_); \
if( !TWAIT_RET ) break; \
if( _ABORT_ != 0 ) { TWAIT_RET = false; break; } \
} while( (_WAIT_EXPR_) == 0 );
/////////////////////////////////////////////////////////////////////////////
#define TWAIT_EX_(_WAIT_EXPR_, _TIMEOUT_, _ABORT_) \
TWAIT_START = GetTickCount(); \
TWAIT_RET = true; \
do {ProcessMessage(1); \
TWAIT_RET = GetTickCount() - TWAIT_START < (DWORD)(_TIMEOUT_); \
if( !TWAIT_RET ) break; \
if( _ABORT_ != 0 ) { TWAIT_RET = false; break; } \
} while( (_WAIT_EXPR_) == 0 );
lambdas, functors... макрос - это наше все... а ProcessMessage(1) тоже радует.
+172
CString convertInt2Str(int i_Number, int i_NumDigits)
{
CString str = "";
for(int j=1; j<i_NumDigits; j++)
{
int digits = (int) pow((float) 10, j);
if(i_Number<digits) str += "0";
}
CString num;
num.Format("%d", i_Number);
return str+num;
}
Adding leading zeros...