來自intlsy‘s省選debug方法
阿新 • • 發佈:2019-04-04
comm turn 要求 out pop point 一個 int -o
其他
debugging
寫代碼的時候......
代碼風格
唯一的要求: 自己能看懂
#define
的使用
下面會講
工程代碼 (不強求)
- 函數專註於自己處理的數據
- 每一個步驟分開, 別凝在一起
變量名
- 好區分
- 不易寫錯
細節問題
- undefined behavior
- 忘記寫返回值 ( 不開
-O2
時返回奇怪的東西, 開-O2
直接 RE ) - main 函數也要記得返回
- 忘記寫返回值 ( 不開
- 變量名與關鍵字
- 只寫了一點代碼: 現在改還來得及
- 寫了一大堆: 使用
namespace
-std=c++11
?
- 類型
double
long double
?long long
?int
?- 爆
longlong
?
樣例過不去?
intlsy‘s debugger
#define B cout << "BreakPoint" << endl;
#define O(x) cout << #x << " " << x << endl;
#define O_(x) cout << #x << " " << x << " ";
#define Msz(x) cout << "Sizeof " << #x << " " << sizeof(x)/1024/1024 << " MB" << endl;
_tp<_tyn T>void Print( T a[] , int s , int t , char sp = ‘ ‘ , char ed = ‘\n‘ ){
if( s > t ) return;
for( int i = s ; i < t ; i++ )
cout << a[i] << sp;
cout << a[t] << ed;
cout.flush();
}
_tp<_tyn T>void Print( T a , int s = 0 , int t = -1 , char sp = ‘ ‘ , char ed = ‘\n‘ ){
if( t == -1 ) t = a.size()-1;
for( int i = s ; i <= t ; i++ )
cout << a[i] << sp;
cout << ed;
cout.flush();
}
實際應用:
#include <iostream>
using namespace std;
int Popcount( int x ){
int ans = 0;
while(x){
if(x&1) ++ans;
// x >>= 1 // OMG! I FORGOT THIS!
}
// Where is the return?
}
int main(){
cout << Popcount(2333) << endl;
return 0;
}
define
初級用法:
#define B cout << "BreakPoint" << endl;
進階:
長得像函數一樣...
#define O(x) cout << #x << " " << x << endl;
#x
: 輸出 x
的變量名
小實驗:
#define Name_Of_Var(x) cout << #x << endl;
int mrclr_akioi = 2333;
Name_Of_Var(mrclr_akioi);
其他 #
開頭的語句
#ifdef INTOJ_SAIGAO
cout << "INTOJ_SAIGAO" << endl;
#endif
gdb 調試
不會
我怎麽調都調不出來
- 使用上面的 debugger
- 部分重構
- 紙筆模擬 (是不是算法錯了)
- 實在不行, 就趕快做下一題
奇技淫巧
- 多上幾次衛生間
禁賽警告禁賽警告禁賽警告
來自intlsy‘s省選debug方法