Author Archives: Enrico

std::getline

std::getline時會等待斷行符,但需要注意的是 在使用pipe redirect時,會有flush的問題 boost::process::ipstream child_stdout; boost::process::opstream child_stdin; boost::process::child child_process; child_process = boost::process::child(exe_path, boost::process::std_out > child_stdout, boost::process::std_err > child_stdout, boost::process::std_in < child_stdin); //... child_stdin

Posted in Tips | Leave a comment

comment tips

多行註解時 有時候只是暫時不需要 /* int x; // blah blah */ 要取消掉,最簡單的方式是直接加上// ///* int x; // blah blah //*/ 這樣可以方便以後加回來,因為如果是直接刪掉/*, */ 加回來時常常會忘記要在哪裡開始結束當然 #if 0, #if 1這樣也是一種常見的方式 或是 if(0) {}

Posted in Tips | Leave a comment

genisoimage

genisoimage -joliet-long -J -r -allow-lowercase -allow-multidot -o 檔案名.iso 目錄名稱 -J 為必須, 指定input charset 為unicode, 不然default是iso8859-1, 會導致output的名稱被取代成underscore

Posted in System Administration | Leave a comment

header only files tips

當開發header only library時,有時候會需要static or global物件,但因為C++ ODR的原因, 當物件被重複定義時在link階段會報錯。 例如 //X.h class X { public: static int m; //這只是declaration }; //main.cpp #include “X.h” int main() { X a; a.m = 0; return 0; } /tmp/ccaFpbvF.o: In function `main’: t.cc:(.text+0x6): undefined reference to … Continue reading

Posted in C++ Language | Leave a comment

MSVC debug build

在VC++的設定: C/C++若有定義_DEBUG 則需注意link應該link MTd or MDd 因為有些function 如_free_dbg是在定義_DEBUG時會被編譯(參考<crtdbg.h>) 此時如果link到release版的MT or MD,則會出現unresolved link 另外,這個錯誤訊息也是因為_DEBUG混用造成的 error LNK2038: mismatch detected for ‘_ITERATOR_DEBUG_LEVEL’: value ‘0’ doesn’t match value ‘2’ in … 在<yvals.h≶(一些c++ std header會間接引用) #ifdef _DEBUG #define _HAS_ITERATOR_DEBUGGING 1 #else #define _HAS_ITERATOR_DEBUGGING 0 #endif … Continue reading

Posted in Tips | Leave a comment

show gcc predefined macro

gcc -dM -E – < /dev/null 這邊僅列出有__STDC的作為範例 #define __STDC_HOSTED__ 1 #define __STDC_UTF_16__ 1 #define __STDC_IEC_559__ 1 #define __STDC_ISO_10646__ 201505L #define __STDC_NO_THREADS__ 1 #define _STDC_PREDEF_H 1 #define __STDC_IEC_559_COMPLEX__ 1 #define __STDC_VERSION__ 201112L #define __GNUC_STDC_INLINE__ 1 #define __STDC_UTF_32__ 1 #define __STDC__ 1 … Continue reading

Posted in C Language | Leave a comment

C99 _Bool

C99定義了關鍵字 _Bool, 又另外新增了stdbool.h 將 #define bool _Bool #define true 1 #define false 0 為什麼用_Bool這樣看起來有點奇怪的命名而不直接定義bool? 最主要的原因是因為在c89 bool並非保留字, 因此在擴展規範時只能從reserved identifier下手了 在c89的規範 7.1.3第一項提到 All identifiers that begin with an underscore and either an uppercase letter or another underscore are always reserved for any … Continue reading

Posted in C Language | Leave a comment

gcc flags about c standard

以gcc 5.1.0為例 https://gcc.gnu.org/onlinedocs/gcc-5.1.0/gcc/Standards.html The default, if no C language dialect options are given, is -std=gnu11. 如果要採用c89(or c90) 可使用下面的選項之一 -ansi -std=c89 -std=c90 -std=iso9899:1990 這樣會關掉一些gnu extension 如果要對應C標準的要求 則再加上 -pedantic or -pedantic-errors 即 -std=c89 -pedantic

Posted in C Language | Leave a comment

mount tips

show export list showmount -e #local showmount -e 192.168.1.10 #remote mount -t nfs 192.168.1.10:/XXXX /YYYY nfsstat -m #查看nfs mount相關信息 mount -t cifs -o admin,passwd //192.168.1.10/base /mnt mount -t cifs -o username=admin //192.168.1.10/base /mnt VBoxManage storageattach #VBOXNAME –storagectl “SATA” –port 0 … Continue reading

Posted in System Administration | Leave a comment

ssh亂碼

ssh進Mac時發生亂碼,可先檢查locale 是否設定成正確 (打locale即可)一般是utf8,因為linux ssh client預設會forward locale env variable可參考 /etc/ssh/ssh_config SendEnv LANG LC_* LANG=”en_US.UTF-8″LC_COLLATE=”en_US.UTF-8″LC_CTYPE=”en_US.UTF-8″LC_MESSAGES=”en_US.UTF-8″LC_MONETARY=”en_US.UTF-8″LC_NUMERIC=”en_US.UTF-8″LC_TIME=”en_US.UTF-8″LC_ALL=”en_US.UTF-8″ 如果不是utf8則可以 export LC_ALL=en_US.UTF-8 export LANG=en_US.UTF-8 也可設定在~/.bashrc

Posted in System Administration | Leave a comment