只是好奇。想象一下,我需要一個#define A是 n 個數字的總和,而這些 n 個數字具有我想明確說明的含義,但僅用于計算A,以提高可讀性,而不是撰寫 n 個宏或僅撰寫#define A <result_of_the_sum>.
有沒有辦法可以將這些 n#define指令的范圍限制為 A 的定義?就像在 C 中一樣:
int a = 0;
{
int b = 1;
int c = 2;
int d = 3;
a = b c d;
} // end of b,c,d scope.
我的意圖是A在編譯時定義,但沒有定義n用于計算的其他定義A,因為這些只會有助于更好地理解代碼。
編輯:
想象一下我有這些宏:
#define MEANINGFUL_NUMBER_1 1
#define MEANINGFUL_NUMBER_2 2
#define MEANINGFUL_NUMBER_3 3
而且我有一個宏,A這是它們的總和,我喜歡有人閱讀我的代碼來理解 A 的值,而不僅僅是直接看到它的定義,即#define A (MEANINGFUL_NUMBER_1 ... MEANINGFUL_NUMBER_N)只有 A 在編譯之前被替換,但MEANINGUL_NUMBER_*不是。
uj5u.com熱心網友回復:
有沒有辦法在 C 中操作前處理器定義范圍
不。
有沒有辦法可以將這些 n #define 指令的范圍限制為 A 的定義?
不。
請注意,宏是在使用時評估的。這意味著在使用宏時所有內容都必須可見。您可以使用#undef所有宏,然后以這種方式“限制范圍”。
在 C 中,沒有名稱空間。在 C 中使用前綴。你會這樣做:
#define LIB_PRIV_B 1
#define LIB_PRIV_C 2
#define LIB_PRIV_D 3
#define LIB_A (LIB_PRIV_B LIB_PRIV_C LIB_PRIV_D)
如果您真的不希望這些數字泄漏到 C 中,那么使用一些東西來生成 C 源代碼,這也為您提供了前處理器方面的更多功能。使用 jinja2、m4、php 或 python,并配置您的構建系統以正確處理生成依賴項。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/487815.html
下一篇:在java中輸入和驗證稅號
