C 如果为函数定义定义了#的用法
我需要知道#if defined的用法是否正确,以及以这种方式使用它的可能缺点C 如果为函数定义定义了#的用法,c,conditional-compilation,C,Conditional Compilation,我需要知道#if defined的用法是否正确,以及以这种方式使用它的可能缺点 #if defined TEST int foo() { return 0; } int foo1() { return 0; } #else int foo() { return 1; } int foo1() { return 1; } #endif 编辑: 我试图将此代码用于我正在使用的两个不同平台。它在语法上是正确的 这种组织方式的主要缺点是您重复测试和非测试用例的函数定义。从一个精
#if defined TEST
int foo()
{
return 0;
}
int foo1()
{
return 0;
}
#else
int foo()
{
return 1;
}
int foo1()
{
return 1;
}
#endif
编辑:
我试图将此代码用于我正在使用的两个不同平台。它在语法上是正确的 这种组织方式的主要缺点是您重复测试和非测试用例的函数定义。从一个精心简化的例子中不可能看出问题的严重程度。另一种组织方式是,假设当前返回语句是更大量代码块的代理(至少在两种情况中的一种情况下):
int foo(void)
{
#if defined TEST
return 0;
#else
return 1;
#endif /* TEST */
}
int foo1(void)
{
#if defined TEST
return 0;
#else
return 1;
#endif /* TEST */
}
对于这些确切的函数,您可以执行以下操作:
#ifdef TEST
#define RETVAL 0
#else
#define RETVAL 1
#endif /* TEST */
int foo(void)
{
return RETVAL;
}
int foo1(void)
{
return RETVAL;
}
然而,您的实际函数不太可能如此简单,因此这不能很好地转换
一般目标是避免重复,并避免在函数中显示条件编译。它在语法上是正确的 这种组织方式的主要缺点是您重复测试和非测试用例的函数定义。从一个精心简化的例子中不可能看出问题的严重程度。另一种组织方式是,假设当前返回语句是更大量代码块的代理(至少在两种情况中的一种情况下):
int foo(void)
{
#if defined TEST
return 0;
#else
return 1;
#endif /* TEST */
}
int foo1(void)
{
#if defined TEST
return 0;
#else
return 1;
#endif /* TEST */
}
对于这些确切的函数,您可以执行以下操作:
#ifdef TEST
#define RETVAL 0
#else
#define RETVAL 1
#endif /* TEST */
int foo(void)
{
return RETVAL;
}
int foo1(void)
{
return RETVAL;
}
然而,您的实际函数不太可能如此简单,因此这不能很好地转换
总体目标是避免重复,避免函数中出现条件编译。我能想到的唯一问题是冗余,对于一个严肃的项目来说,这是一个非常严肃的isuue。您应该尽可能减少代码重复,这是另一种减少代码重复的方法:
int foo()
{
#if defined TEST
return 0;
#else
return 1;
#endif
}
int foo1()
{
#if defined TEST
return 0;
#else
return 1;
#endif
}
我能想到的唯一问题是冗余,对于一个严肃的项目来说,这是一个非常严肃的isuue。您应该尽可能减少代码重复,这是另一种减少代码重复的方法:
int foo()
{
#if defined TEST
return 0;
#else
return 1;
#endif
}
int foo1()
{
#if defined TEST
return 0;
#else
return 1;
#endif
}
您可以创建一个多平台库,将特定的平台代码放入另一个特定的平台库中。这样,您的多平台库就可以使用
#if
指令使用正确的特定库。换句话说,您将隔离特定的平台代码。您可以创建一个多平台库,将特定的平台代码放在另一个特定的平台库中。这样,您的多平台库就可以使用#if
指令使用正确的特定库。换句话说,您将隔离特定的平台代码。您想用它做什么?你期望什么?这个语法是有效的,但是正确性取决于你想要实现什么。你想用这个做什么?你期望什么?这个语法是有效的,但是正确性取决于你想要达到什么。我不同意你的观点。我认为,在不同的平台上实现不同的功能是可以的,因为这是功能点——抽象实现。但函数内部的条件编译将引导您使用函数,在不同的平台上执行不同的操作,并进行地狱般的测试。是的,我讨厌条件编译,但哪一个更糟糕?根据我自己的经验,避免代码重复是第一要务。对我来说,语法(函数声明)的重复是可以的。逻辑复制是功能提示。我不同意你的观点。我认为,在不同的平台上实现不同的功能是可以的,因为这是功能点——抽象实现。但函数内部的条件编译将引导您使用函数,在不同的平台上执行不同的操作,并进行地狱般的测试。是的,我讨厌条件编译,但哪一个更糟糕?根据我自己的经验,避免代码重复是第一要务。对我来说,语法(函数声明)的重复是可以的。逻辑复制提示功能。