Автоматическое форматирование кода
PS: пользуйся emacs. или indent.
a pod win est' port emacs?
А спросить у гугла?
platformu Win podderzhivaet..
XEmacs tozh niche.. tak.
В итоге заюзал первое, что попалось под руку, а именно astyle. Простенькая консольная программка. Привела файл более-менее в порядок, что от нее и требовалось. Все равно с чужими прогами доводится общаться редко, а свои я поддерживаю всегда в порядке
Все равно с чужими прогами доводится общаться редкоИ это не изменится, пока не научишься читать чужие программы "как есть" и уважать привычки других людей. А для программиста хуже нет чем в собственном соку вариться.
респект
if (i==0) {следует расстреливать на месте ИМХО.
Do1;Do2;Do3;}
BOOL CSymbolData::operator != (CSymbolData &rfSymbolData){
//if(m_ptComponent == rfSymbolData.m_ptComponent)
if(m_anSymbolName == rfSymbolData.m_anSymbolName)
if(m_anSymbolType == rfSymbolData.m_anSymbolType)
if(m_anLayers == rfSymbolData.m_anLayers)
if(m_enModelingMethod == rfSymbolData.m_enModelingMethod)
if(m_anReferenceSymbolName == rfSymbolData.m_anReferenceSymbolName)
if(m_anRefDes == rfSymbolData.m_anRefDes)
if(m_anComponents == rfSymbolData.m_anComponents)
if(m_anParameters == rfSymbolData.m_anParameters)
if(m_blUseCustomStimulus == rfSymbolData.m_blUseCustomStimulus)
if(m_anStimulus == rfSymbolData.m_anStimulus)
if(m_enTLineEditMode == rfSymbolData.m_enTLineEditMode)
if(m_inConductorCnt == rfSymbolData.m_inConductorCnt)
//if(m_blEnableReport == rfSymbolData.m_blEnableReport)
//if(m_anPhysicalVals == rfSymbolData.m_anPhysicalVals)
if(m_anTlineParam == rfSymbolData.m_anTlineParam)
if(m_anTraceOnLayer == rfSymbolData.m_anTraceOnLayer)
if(m_inDielectricCnt == rfSymbolData.m_inDielectricCnt)
if(m_inReferencePlaneIndex == rfSymbolData.m_inReferencePlaneIndex)
if(m_anFreeTraceConductor == rfSymbolData.m_anFreeTraceConductor)
if(m_anFreeTraceDielectric == rfSymbolData.m_anFreeTraceDielectric)
if(m_anMtrxC == rfSymbolData.m_anMtrxC)
if(m_anMtrxL == rfSymbolData.m_anMtrxL)
if(m_anMtrxR == rfSymbolData.m_anMtrxR)
if(m_anMtrxG == rfSymbolData.m_anMtrxG)
if(m_anMtrxRS == rfSymbolData.m_anMtrxRS)
if(m_szViaCircuit == rfSymbolData.m_szViaCircuit &&
m_fViaL == rfSymbolData.m_fViaL &&
m_fViaC == rfSymbolData.m_fViaC &&
m_szViaLSweep == rfSymbolData.m_szViaLSweep &&
m_szViaCSweep == rfSymbolData.m_szViaCSweep &&
m_bViaCVary == rfSymbolData.m_bViaCVary &&
m_bViaLVary == rfSymbolData.m_bViaLVary
)
return FALSE;
return TRUE;
}
void GetIbisModelString( CSymbolComponent *ptSymbolComponent, CString& val)
{
CSymbolModel *ptSymbolModel = ptSymbolComponent->GetSymbolModel;
CString corner = ptSymbolModel->m_anCornerCases[ ptSymbolModel->m_inCurrentCornerCase].m_csName;
val.Format("%s%s%s\t%s%s",
ptSymbolComponent->m_blSimulate ? "1" : "0", // "1" - include in simulation
"0", // not used
(LPCTSTR)ptSymbolComponent->m_anComponentName,
ptSymbolComponent->m_enSimulateBy == CSymbolComponent::enSimulateByPin?
"" : "m", // m - simulate by model
(LPCTSTR)corner);
for( int ip = 0; ip < ptSymbolModel->m_anPins.m_inCnt; ++ip) {
val += "\t";
val += ptSymbolModel->m_anPins[ip].m_anPinName;
}
// voltage references
int i = ptSymbolModel->m_inSetIndex;
if( i == -1)
return;
int j = ptSymbolModel->m_anReferenceVoltages[i].m_Set.m_inCnt;
for( int kl = 0; kl < j; ++kl){
if( !ptSymbolModel->m_anReferenceVoltages[i].m_Set[kl].m_csName.Compare(REFV_RANGE_TITLE {
// user defined reference voltage
AddParVal( val, REFV_RANGE, ptSymbolModel->m_anReferenceVoltages[i].m_Set[kl].m_dbValue);
} else if( !ptSymbolModel->m_anReferenceVoltages[i].m_Set[kl].m_csName.Compare(REFV_UP_TITLE {
// user defined pullup voltage
AddParVal( val, REFV_UP, ptSymbolModel->m_anReferenceVoltages[i].m_Set[kl].m_dbValue);
} else if( !ptSymbolModel->m_anReferenceVoltages[i].m_Set[kl].m_csName.Compare(REFV_DOWN_TITLE {
// user defined pulldow voltage
AddParVal( val, REFV_DOWN, ptSymbolModel->m_anReferenceVoltages[i].m_Set[kl].m_dbValue);
} else if( !ptSymbolModel->m_anReferenceVoltages[i].m_Set[kl].m_csName.Compare(REFV_POWERCLAMP_TITLE {
// user defined power clamp voltage
AddParVal( val, REFV_POWERCLAMP, ptSymbolModel->m_anReferenceVoltages[i].m_Set[kl].m_dbValue);
} else if( !ptSymbolModel->m_anReferenceVoltages[i].m_Set[kl].m_csName.Compare(REFV_GNDCLAMP_TITLE {
// user defined ground clamp voltage
AddParVal( val, REFV_GNDCLAMP, ptSymbolModel->m_anReferenceVoltages[i].m_Set[kl].m_dbValue);
}
}
if(ptSymbolModel->m_blOverrideReferenceValues) {
AddParVal( val, REFV_USE, "y");
}
// signal quality constraints
}
int CScrFieldSolver::CalculateMatrixesFree(
ScrComponent* pC,
ConductorType* pConductors,
int ncond,
CSweepsTableMatrixes* matrixes,
CSweepsTableIntfImpl* sweepFunc,
CStringList* pAttList)
{
bool upside = false;
const char* p;
p = pC->AttVal(FREE_N_DIELECTRICS);
if( !p) return 0;
int ndiel = atoi(p);
if( ndiel < 1) return 0;
int refplane_code = 1; // bottom
p = pC->AttVal(FREE_REFPLANES);
if( p) {
if( *p == *FREE_REFPLANES_TOP)
refplane_code = 0;
else if( *p == *FREE_REFPLANES_BOTTOM)
refplane_code = 1;
else if( *p == *FREE_REFPLANES_BOTH)
refplane_code = 2;
}
// for field solver first dielectric is always next to reference plane
if( refplane_code == 1)
upside = true;
int n_diel_pars = 3;
double* pdiel = new double [ndiel*n_diel_pars];
int idx = 0;
CString key;
int i;
CString sweep_val, val;
CString sAt;
if( upside)
i = ndiel - 1;
else
i = 0;
while(1) {
for( int j = 0; j < n_diel_pars; ++j) {
if( j == 0)
key.Format(FREE_H_DIEL,i);// height
else if( j == 1)
key.Format(FREE_E_DIEL,i);// dielectric constant
else
key.Format(FREE_TAN_DIEL,i);// tan
if( sweepFunc->GetAttValIndirect(dynamic_cast<ScrAttributes*>(pC (LPCTSTR)key, sweep_val {
sAt.Format("%%s"LPCTSTR)key,pC->GetName;
pAttList->AddHead( sweep_val);
pAttList->AddHead( sAt);
pdiel[idx++] = (double)atofLPCTSTR)sweep_val);
} else {
p = pC->AttValLPCTSTR)key);
ASSERT(p);
if( p)
pdiel[idx++] = (double)atof(p);
else
pdiel[idx++] = 1.1;
}
}
if( upside) {
--i;
if( i < 0)
break;
} else {
++i;
if( i >= ndiel)
break;
}
}
double hall = 0;
for( i = 0; i < ndiel*n_diel_pars; i += n_diel_pars){
hall += pdiel[i];
}
for(i = 0; i < ncond; i++){
if( upside) {
pConductors[i].y = hall - pConductors[i].y;
} else {
pConductors[i].y = pConductors[i].y - pConductors[i].height;
}
ASSERT( pConductors[i].y > 0.0);
}
int rc = CalculateMatrixesFreeExe( pConductors, ncond, pdiel, ndiel,
refplane_code == 2 ? 2 : 1, // number of reference planes
matrixes);
delete [] pdiel;
return rc;
}
В общем, у меня много подобных маразмов. Программист в первую очередь должен научиться ПИСАТЬ ТАК, чтобы другие МОГЛИ ЭТО ЧИТАТЬ. И уже во вторую очередь учиться "не вариться в собственном соку".
В чем маразм, я честно говоря не понял, expandtab надо выставить в 4 вместо 8-и. Заодно свой код запость?
Лишний перевод строки ?
Правда маразм использовать '\t'. Вроде, судя по коду, пишет в VS. А настроить нормально слабо?
BOOL CSymbolData::operator != (CSymbolData &rfSymbolData){
//if!(m_ptComponent == rfSymbolData.m_ptComponent) return TRUE;
if!(m_anSymbolName == rfSymbolData.m_anSymbolName) return TRUE;
if!(m_anSymbolType == rfSymbolData.m_anSymbolType) return TRUE;
...
return FALSE;
}
for (i=0; i<N; i++) Do;
а так плохо смотрится
for (i=0; i<N; i++)
Do;
лучше
for (i=0; i<N; i++)
{
Do;
}
for (i=0; i<N; i++) Do;
for (i=0; i<N; i++)
Do;
for (i=0; i<N; i++)Нет, ну вот ты это серьезно? А это
{
Do;
}
Do;нормально? Может лучше
Do( );или
Do ;или
do;или
_do;А это-то вообще никуда не годится
for (i=0; i<N; i++)надо
for (i = 0; i < N; i++)И я бы вот еще N через I бы обозначил, давай обсудим?
И я бы вот еще N через I бы обозначил, давай обсудим?#define i j
#happy debugging!
Просто вы не видели код проф. Пронкина с ММ.
Ты хочешь сказать, что вот так с лёгкостью бы понял, что делается в том коде, который я запостил? Ну-ну.
Бывают сложные программы. Да, надо сидеть и разбираться как они работают. Но наивно думать, что они вдруг станут простыми и понятными от того, что ты переформатируешь их текст. И я очень редко видел полезные комментарии, к сожалению люди не умеют комментировать свои программы. Они стесняются написать _свои_ мысли на тему и вместо этого пишут самоочевидные вещи. Исключения встречаются, но реже чем хотелось бы. Я уж молчу про комментарии, которые расходятся с действительностью.
показывай
а, совсем забыл, это же собственность oilspace
Почему так происходит - понять просто. Например, при правильной расстановке {} легче сообразить, где начинается и кончается блок. Или по имени переменной определить, входит ли она в класс.
Do;пишу так
for(i = 0; i < N; i++)привычка, хотя так тоже нравится
for (i = 0; i < N; i++)
Совершенно верно. В первой строчке так и написано.
...пока не научишься читать чужие программы "как есть" и уважать привычки других людейЯ вполне уважаю чужие привычки в оформлении текста порграмм, но вот отсутствие таких привычек, при всем своем желании уважить не могу. Вот пример того кода, который мне требовалось отформатировать:
Ну, например, ты мне можешь указать разумную причину в необходимости отступа перед функциями pz_wgs?
for(i=0;i<N_GLO_Ef;i++)
{ Vm=100000.0;
for(j=0;j<HowMany[GLO_N[i]-1+32];j++)
{ VV=fabs(Ts-Tb[GLO_N[i]-1][j]);
//Numb_GL=j;
//if(fabs(VV)<1800.0) break; // Since normal interval is 0.5h
if(VV<Vm){ Vm=VV;Numb_GL=j;} // We search for mimimum time span
}
if(Vm<1800.0) tim_out[Ksat]=1; // 0.5 h
//ifNsv[Ksat]-32)==23||(Nsv[Ksat]-32)==24) tim_out[i]=0;
//printf("GL=%d=%d ",Nsv[Ksat],Numb_GL);
//Numb_GL=0;
//--- Comment was here ------
gl_ef(TscharGLO_N[i]-1Numb_GL);
//printf("2\n ");
for(j=0;j<6;j++) coor[j][Ksat]=XGL[GLO_N[i]-1][j][Numb_GL]*1.e3;
//--- Comment was here ----------------
for(j=0;j<3;j++) us[j]=coor[j][Ksat];
pz_wgs(0,us);
for(j=0;j<3;j++) coor[j][Ksat]=us[j];
for(j=0;j<3;j++) us[j]=coor[j+3][Ksat];
pz_wgs(1,us);
for(j=0;j<3;j++) coor[j+3][Ksat]=us[j];
Nsv[Ksat]=GLO_N[i]+32;
Ksat++;
}
Вот я не люблю когда в комментариях код. Хочется что-то отключить, делай #if 0. А комментарии для человеческого языка, иопт.
/*
...
//*/
Кстати очень удобно
Для коментирования кода использую макросы, на которые сделал шорткаты: Ctrl-/ -- коментирование, Ctrl-Shift-/ -- раскоментирование.
А вот коментарии типа /* ... */ не использую -- не прижились они у меня...
разумную причину в необходимости отступа перед функциями pz_wgsА мб оно было под фором, а потом фигурные скобки снесли?..
Но это не оправдание.
А мб оно было под фором, а потом фигурные скобки снесли?..Вряд ли... В данном случае for заполняет массив, который затем передается в эту функцию. Я как-то с трудом могу представить ситуацию, которая могла бы привести к такой трансформации кода. Хотя, конечно, в принципе все возможно, может раньше и функция-то другая была, а for'а вообще не было
Но это не оправдание.Полностью солидарен
Я пишу так:
и т.п.
/////////////////////////////////////////////////////////////////////////////
//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::://
//:::::::::::::::::::::::: Заголовок IP пакета :::::::::::::::::::::::::::://
//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::://
/////////////////////////////////////////////////////////////////////////////
struct tagIPHeader; /*
///[graphics] ®
<<< IPHeader v4.0 >>>
POS 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
F E D C B A 9 8 7 6 5 4 3 2 1 0 F E D C B A 9 8 7 6 5 4 3 2 1 0
00h +-------------------------------+---------------+-------+-------+
| Total Length |Type of Service| IHL |Version|
04h +-------------------------+-----+---------------+-------+-------+
| |Flags| |
| | N | |
| Fragment Offset | O | Identification |
| | F | |
08h +-------------------------+-----+---------------+---------------+
| Header Checksum | Protocol | Time to Live |
0Ch +-------------------------------+---------------+---------------+
| Source Address |
10h +---------------------------------------------------------------+
| Destination Address |
14h +---------------+-----------------------------------------------+
| Padding | Options |
18h +---------------+-----------------------------------------------+
///[text description]
///[remarks]
*/
///[implementation]
typedef struct tagIPHeader{
dword TotalLenght : 0x10 ;//Total datagram length
dword ServiceType : 0x08 ;//Type of service
dword IPHeaderLenght : 0x04 ;//Length
dword Version : 0x04 ;//Version
dword FragmentOffset : 0x0D ;//Fragment offset
dword Flags : 0x03 ;//Flags
dword Identification : 0x10 ;//Identification
dword HeaderChecksum : 0x10 ;//Header checksum
dword Protocol : 0x08 ;//Protocol
dword TimeToLive : 0x08 ;//Time to live
dword SrcIP : 0x20 ;//Source address
dword DstIP : 0x20 ;//Destination address
} IPHeader, *lpIPHeader;
typedef struct tagIPHeaderEx
#ifndef VS7_PUB_PATCH
: public tagIPHeader
#endif
{
struct tagIPHeader;
dword Options[1] ;//Additional fields
}IPHeaderEx, *lpIPHeaderEx;
/////////////////////////////////////////////////////////////////////////////
//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::://
//:::::::::::::::::::::::: Заголовок TCP пакета ::::::::::::::::::::::::::://
//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::://
/////////////////////////////////////////////////////////////////////////////
ЗЫ: В форуме этот текст нечитаем, для реальной заценки Ctrl+C Ctrl+V в ваш любимый редактор Си-кода. Анреспект суппортерам UBBCODE. Это всё, что вы можете?
ЗЫ2: Народ, зацените по-настоящему респектные теги DevPortal'а.
ЗЫ: В форуме этот текст нечитаем, для реальной заценки Ctrl+C Ctrl+V в ваш любимый редактор Си-кода. Анреспект суппортерам UBBCODE. Это всё, что вы можете?Респект мне, который прочитал и исправил твой пост.
Почему непосредственно по ссылке " UBBCode in your posts" не выложить полный список тэгов?
//:::::::::::::::::::::::: Заголовок IP пакета :::::::::::::::::::::::::::://
не так отображается?
Еще теперь то исправленое сообщение мне редактировать уже вдруг нельзя..
1.
struct tagIPHeader; [b]/*[/b]Почему "/*" не с начала следующей строчки?
На его поиск уходит время.
Или цветовое выделение спасает?
2.
: [b]public[/b] tagIPHeader"public" тоже как-то теряется.
Имхо, лучше перенести в начало строчки, а еще лучше еще и сделать отдельной строкой (то, что у тебя там только одна строка - это частный случай).
А скриншот можешь выложить?
Чтобы цвета глянуть...
Еще описание структуры данных в комментарии желательно было бы совместить с описанием в коде, но как это сделать, чтобы не потерялась читабельность - так сразу не знаю
Оставить комментарий
4223080
Кто-нить знает прогу для автоформата кода на С++. Что-нить получче, чем встроенный автоформат. Интересует собственно прежде всего возможность такого формата:Ну и тому подобное