我不是程序員,但我需要這樣做! :)我的問題是我需要定義一些常量來設置或不設置我的代碼的某些特定部分,並且最好使用#define而不是正常變量。代碼是波紋管。根據之前所做的字符串比較,isample可以等於0,1,2或3。假設isample = 1,那麼代碼輸出常量SAMPLE等於1,但是它會進入if isample == 0!定義有問題。發生什麼事?還有另一種方法可以做到嗎?testing #define CONSTANT
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int isample = 1;
#define SAMPLE isample
printf("\nSAMPLE %d", SAMPLE);
#if SAMPLE == 0
#define A
#define AA
printf("\nA");
#elif SAMPLE == 1
#define B
printf("\nB");
#elif SAMPLE == 2
#define C
printf("\nC");
#else
printf("\nOTHER");
#endif
printf("\nBye");
}
結果:
SAMPLE 1
A
Bye
我也試過:
#define SAMPLE 4
#undef SAMPLE
#define SAMPLE isample
,結果是一樣的。
我也試過使用變量。除了使用#if
塊的,我用if
:
if (SAMPLE == 0)
{
#define A
#define AA
printf("\nA");
}
else if (SAMPLE == 1)
{
#define B
printf("\nB");
}
else if (SAMPLE == 2)
{
#define C
printf("\nC");
}
else
{
printf("\nOTHER");
}
int abc, def;
#ifdef A
abc = 1;
def = 2;
#endif
#ifdef B
abc = 3;
def = 4;
#endif
#ifdef C
abc = 5;
def = 6;
#endif
printf("\nabc %d, def %d\n", abc, def);
結果:
SAMPLE 1
B
abc 5, def 6
因此,所有的#define
的被定義,不僅是選擇一個,這將是B
。 A, B and C
定義了在同一組變量中工作的代碼的一部分。我需要根據isample
設置其中之一。
宏的處理。他們不能訪問普通的變量值。 – Barmar
@JensGustedt定義了'A'和'AA','B'和'C'不是。未定義的標記被'0'替換爲'#if'中的表達式評估目的 –
所以要做我想做的事情,我有兩個選擇: 1)每次定義「SAMPLE」時,我運行代碼; 2)使用正常變量,並取消所有我定義的「常量」。 我正在做選項1,但是我已經遇到了一些問題,當我忘記更改它時,並且由於代碼需要很長時間才能運行,最好確保它能做正確的事情。我想我會選擇選項2並重寫代碼... – Thaise