我正准备参加编码比赛,如果您的代码更短,您将获得奖励积分。我想知道是否可以从switch case语句'#define''case'关键字,这样如果我必须在竞争中使用switch case语句,我不必在switch中反复输入'case'关键字言。
示例代码段:
switch(input_string[0])
{
case '+':p = (a + b);t;
case '-':p = (a - b);t;
case '*':p = (a * b);t;
case '/':p = (a / b);t;
case '%':p = (a % b);t;
case '^':p = pow(a,b);t;
}
a,b和p是整数。当字符input_string [0]为'+'时,添加a和b,并将总和分配给p。
重要提示:上面代码段中的't'是break语句。我用'#define t break;'所以我不必多次写break关键字。我想知道是否可以使用'case'关键字做同样的事情。
我可以将case定义为'#define c case',并在switch case case语句中使用'case'的地方使用'c',以便生成的代码片段如下所示:
switch(e[i])
{
c '+':p = (a + b);t;
c '-':p = (a - b);t;
c '*':p = (a * b);t;
c '/':p = (a / b);t;
c '%':p = (a % b);t;
c '^':p = pow(a,b);t;
}
我尝试过'#define c case',但我收到以下错误 - “错误:表达前预期'case'关键字”
答案 0 :(得分:2)
我建议不这样做。但是,如果你这样做,请立即取消定义立即,否则会看到c
任何地方都会发生非常糟糕的事情,无论在哪种情况下
#define c case
#define t break;
switch(e[i])
{
c '+':p = (a + b);t;
c '-':p = (a - b);t;
c '*':p = (a * b);t;
c '/':p = (a / b);t;
c '%':p = (a % b);t;
}
#undef c
#undef t
在这种情况下,处理器基本上是一个令牌替换工具,将在实际编译之前运行。
这比原始代码更短:
#define c case
#define t break
switch(e[i]){c'+':p=(a+b);t;c'-':p=(a-b);t;c'*':p=(a*b);t;c'/':p=(a/b);t;c'%':p=(a % b);t;c'^':p=pow(a,b);}
#undef c
#undef t
正如您所看到的,除了代码混淆挑战外,更短是一个非常糟糕的主意
答案 1 :(得分:0)
你可以这样做,是的。如果需要,可以用宏替换任何C ++关键字。
但是,您需要注意不要与任何现有标识符冲突。请记住,如果您在其他任何地方使用c
令牌,那么在预处理器运行时它也会变成“大小写”。
P.S。如果代码短缺是通过字面上的程序中最少的字符数来量化的,那就摆脱那个讨厌的空白。
答案 2 :(得分:0)
如果你想要的话,你需要做#define c case
。您尝试执行的操作是将所有c
替换为case
,而不是将所有case
替换为c
。那就是:
#define c case
switch(e[i])
{
c '+':p = (a + b);t;
c '-':p = (a - b);t;
c '*':p = (a * b);t;
c '/':p = (a / b);t;
c '%':p = (a % b);t;
c '^':p = pow(a,b);t;
}