如果你在 C 中呼叫類似的東西:
#include <stdio.h>
#define REPS ,a
...
int a = 1;
printf("%d" REPS);
它會作業,但有可能在呼叫REPS基于未知值宏多次,例如像,我想在五個輸入scanf,但是我希望我的代碼來自動執行它(例如,如果#define REPS ,a[i]然后:... ,a[1] ,a[2]) ?
uj5u.com熱心網友回復:
它會作業,但是否可以根據未知值多次呼叫 REPS
#define不會。創建一個可以在代碼中使用的前處理器宏,但是當編譯器編譯您的代碼時,實際值會替換宏。如果你有:
#define FOO 7
例如,FOO在7編譯代碼之前,代碼中的每個出現都會被替換;到編譯器看到您的代碼時,沒有#define和沒有FOO,只有7在任何地方FOO。盡管有一些其他前處理器命令(例如#if)可以控制是否#define完全評估給定,但沒有其他前處理器控制結構(回圈等)。
我想在 scanf 中有五個輸入,但我希望我的代碼自動執行它(例如,如果 #define REPS ,a[i] 那么:... ,a[1] ,a[2])?
你當然可以自動化這樣的事情;只是前處理器不是這項作業的正確工具。考慮:
int reps = 5
//...
for (int i = 0; i < reps; i ) {
scanf(" %d", &a[i]);
}
uj5u.com熱心網友回復:
REPS 在編譯時進行評估,因此在這種情況下它不能依賴于運行時值a。有一些技巧,但一般來說你不能用宏來編譯回圈。
我建議您按照以下方式撰寫一個函式:
#include <stdio.h>
void print_int_array(size_t n, int a[n]) {
for(int i = 0; i < n; i )
printf("%d%s", a[i], i 1 < n ? ", " : "\n");
}
int main() {
print_int_array(0, (int []) {});
print_int_array(1, (int []) {1});
print_int_array(2, (int []) {1, 2});
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/359873.html
上一篇:嘗試將兩個字串鏈接在一起時緩沖區溢位,為什么會出現此錯誤?
下一篇:將有效字串復制到C中的二維陣列
