c-preprocessor

    22熱度

    5回答

    在C中,我們經常要運行這樣的代碼 if (! somefun(x, y, z)) { perror("somefun") } 是否有可能創建一個宏如下其中,用於: #define chkerr ... chkerr(somefun(x, y, z)); 將編譯成以上? 我已經知道我可以使用__VA_ARGS__宏,但這需要我這樣稱呼它 chkerr(somefun, x, y

    0熱度

    2回答

    我遇到以下問題: 我們的測試環境無法完全模擬生產環境中的某個硬件部分,因此某些代碼在測試應用程序時需要排除。 因此我需要的東西在 #IFNDEF testing_env //code to exclude #ENDIF 如果我包括#DEFINE testing_env這只是正常的方式,但這樣的我需要手動註釋/取消註釋這個定義我每次轉換環境的時間。 我正在尋找一種基於主機名或類似功能執行此操

    1熱度

    1回答

    我有一個用C語言編寫的大型代碼庫,有幾個枚舉。最近我修改了其中的一個枚舉,並且產生了重大影響,因爲我有點「錯誤」 - 評估了影響。 有看起來像這樣的枚舉: - typedef enum en_e_type { ENUM_VAL_1 = 1, ENUM_VAL_2 = 2, ENUM_VAL_3 = 3, ENUM_VAL_MAX = 4, }en_e; 這得到了改變,以 typed

    0熱度

    1回答

    我已經設法在Linux Mageia 5.1中使用gcc 4.9.2版構建Kicad 4.0.6。我首先在/usr/include/wx-3.0/wx/目錄中手動修復了兩個wxWidgets 3.0.2頭文件:regex.h和features.h。 Kicad然後成功編譯。由於未定義的變量wxRE_ADVANCED,使用本地wx-3.0頭文件,編譯器在pcbnew/netlist_reader.c

    1熱度

    1回答

    考慮以下test.c: int main(void) { int a; #if 1==0 #line 1 "test.c" #endif a = 1; return 0; } 注意,即#if條件爲假這裏。 我需要做的話,在執行下列命令後的輸出不會是空的: clang -g test.c objdump -D a.out >dis sed -i 's/

    -8熱度

    2回答

    該聲明是在一個文件中: #include "filename" 當將這個文件由它的內容所取代? 編譯之前 後彙編 在執行過程中

    1熱度

    1回答

    我注意到在函數前面定義一個空的PURE會混淆VS2015中的Intellisense。與此同時,字母(pure,Pure,PurE)的其他非大寫字母組合的作品: #include <stdint.h> #define SOME #define PURE #define Pure #define STUFF // upper case "PURE" SOME PURE STUFF u

    -2熱度

    2回答

    我在使用X宏中的offsetof()時出現明顯錯誤。下面的代碼顯示了一個相當簡單的結構的例子,一個是明確定義的,另一個是使用X宏定義的。然後將兩個結構中每個結構域的偏移量打印到屏幕上。正如您在下面的註釋中看到的那樣,使用X宏定義的結構中的字段顯示不正確的偏移量。 我認爲這是一個打印問題。有人可以解釋一下這個謎團嗎? #include <stdio.h> #include <stdlib.h>

    0熱度

    1回答

    我已經閱讀了很多有關宏化的字符串,但我顯然不太明白。我想創建一個字符串,其中需要首先評估宏的參數。有人可以解釋我的錯在哪裏,或者如何更好地做到這一點? #define SDDISK 2 // Note defined in a library file elsewhere ie not a constant I know) #define DRIVE_STR(d) #d ":/" #d

    3熱度

    1回答

    我有一些代碼應該是一個線程安全的Python/C++ API。我正在使用宏Py_BEGIN_ALLOW_THREADS和Py_END_ALLOW_THREADS,它們展開以創建保存線程狀態並創建一個鎖。我在方法退出之前釋放鎖;一旦在if語句範圍內,並且一次在方法範圍內。 爲什麼不能編譯?它會在第二個Py_END_ALLOW_THREADS宏處生成錯誤:error: _save was not de