C 雜談 C 遇到的坑

2021-07-24 05:04:21 字數 509 閱讀 3023

在使用c++呼叫sqlite的demon中,將巨集替換寫入了乙個字串中,但執行的時候與預期不一致。

先看**:

#define _var_arg_20 (20)

#define _var_arg_40 (40)

#define _var_arg_spec (20-30)

char *str = "target pin[_var_arg_20]:value[_var_arg_40]:spec[_var_arg_spec]";

編譯無問題,執行的時候,str中的各個巨集並沒有被替換。第一反應是,巨集是在預編譯的時候進行替換的,不應該存在問題才對。後來仔細想想,char *實際上是乙個存放在靜態儲存區裡面的字串,其實質是乙個右值,不允許修改,且其建立是在預編譯之前完成的,字串中的巨集被視為普通的字串不會被替換。

如果要實現字串的替換,可以使用 # 號連線乙個字串與巨集。

也可以先使用佔位符替換巨集,然後以格式化字元的方法使用巨集替換佔位符達到目的。

c 呼叫python遇到的坑

簡單的記錄一下,僅供參考。這句好像一定要呼叫,否則py initialize 就會異常,可能跟路徑有關。不知道怎麼設定可以不用呼叫這一句?2 處理python函式返回值的時候,如果返回值是單個字串,以下寫法是對的 pyobject pret pyobject callobject pfunc,arg...

C 串列埠通訊遇到的坑

c 串列埠通訊中有乙個datareceived事件可以委託乙個接收函式。此接收函式是執行在輔線程 secondary thread 上的。如果要在這個函式中修改主線程中的一些元素,比如ui介面上的變數的值,必須使用委託的方式。datareceived所註冊的接收函式和主線程中的傳送函式是非同步的。如...

c呼叫python遇到的那些坑

首先得保證安裝完整python的元件 我的是debian系統 apt get install python dev 編譯c程式時候不能簡單的 gcc c 因為會找不到相關的標頭檔案 需要gcc c wall i usr include python2.7 lpython2.7 如果你的python安...