相关疑难解决方法(0)

ANSI C和函数重载

可能重复:
C中的函数重载

ANSI C不允许函数重载(我不确定C99).

例如:

char  max(char  x, char  y);
short max(short x, short y);
int   max(int   x, int   y);
float max(float x, float y);
Run Code Online (Sandbox Code Playgroud)

不是有效的ANSI C源代码.

ANSI C中的函数重载问题应该使用哪种技术(或想法)?

注意:

答案是重命名函数,但应该使用哪种模式进行重命名,函数名称仍然是"良好的函数名称"?

例如:

char  max1(char  x, char  y);
short max2(short x, short y);
int   max3(int   x, int   y);
float max4(float x, float y);
Run Code Online (Sandbox Code Playgroud)

对于函数名称来说不是一个好的命名max.

c naming overloading

6
推荐指数
1
解决办法
2664
查看次数

有没有办法为C中的类型分配唯一的编号?

我来自C++背景,并且最近占用了C.我在为类型分配数字时遇到问题(反之亦然); 我需要的是一种为类型分配唯一ID的方法,最好是从0.我的目标是拥有一个基于传入类型索引数组的函数(或宏),我相信只有通过宏才能实现.

此外,由于我使用了sizeof()我需要传递的类型,因此enums难以使用替代方案.如果我将枚举器传递给函数/宏,那么我将不得不从数字中获取类型,完全相反(但可能更容易)的问题.

这在C中甚至可能吗?我已经尝试过研究这个问题,但是没有找到任何对这个问题的答案,特别是我能用C++做模板,如下所示:

int curTypeIdx = 0;

template <typename T>
struct TypeHandle {
    static int const val;
}

template <typename T>
int const TypeHandle<T>::val = curTypeIdx++;
Run Code Online (Sandbox Code Playgroud)

原因是我正在建立一个ECS.我有一个EntityManager结构,它应该包含组件数组.由于我计划这是通用的,我定义了components(MAX_COMPONENTS)的上限并且有一个char*长度为s的数组MAX_COMPONENTS.在基本层面,目标是让用户EntityManager能够定义自己的组件,并将它们存储在这些通用阵列中.

如果有任何其他方式

谢谢大家的任何建议.

c types

5
推荐指数
1
解决办法
104
查看次数

C是否支持可选的null参数?

在Python中,我习惯了类似的东西

def send_command(command, modifier = None):
Run Code Online (Sandbox Code Playgroud)

然后modifier参数是可选的,并且参数的缺失可以与参数0区分开来.在C中是否有类似的功能?我没有C和Googling的经验,但是找不到如何在C中使用可选参数的明确声明.看起来你可以类似地分配它们,如下所示:

void send_command(uint8_t command, uint8_t modifier = 0) {
Run Code Online (Sandbox Code Playgroud)

所以第二个参数是可选的,如果不使用则默认为0? (编辑:不,无论如何这是无效的C)

但功能可以区分send_command(SOMETHING)和send_command(SOMETHING, 0)?理想情况下,第二个参数可以是任何uint8值,包括0.

也许NULL与0不同?

void send_command(uint8_t command, uint8_t modifier = NULL) {
Run Code Online (Sandbox Code Playgroud)

c null optional-parameters function-parameter function-declaration

4
推荐指数
2
解决办法
2万
查看次数

为什么不允许"重载函数的第二个C链接"?

我将我的C++ DLL转换为C dll:

#ifdef __cplusplus
    extern "C" {
#endif

MY_EXPORT int  my_func();
MY_EXPORT void my_func(int n);

#ifdef __cplusplus
    }
#endif
Run Code Online (Sandbox Code Playgroud)

没有extern C声明,一切都很好.我得到了这个宣言

错误C2733:不允许重载函数'my_func'的第二个C链接

为什么不允许从C风格的dll导出重载函数?

c c++ dll extern

4
推荐指数
1
解决办法
6390
查看次数

函数重载是否在C中工作?

可能重复:
C中的函数重载C
是否支持重载?

任何人都可以解释函数重载是否在C中工作?

我尝试过这个并没有用:

#include <stdio.h>

int f(int val) {
    printf("f int\n");
    return 5;
}

int f(char *val) {
    printf("f char *\n");
    return 6;
}

int main() {
    f(5);
    f("moo");
}
Run Code Online (Sandbox Code Playgroud)

gcc C编译器说:

overload.c:8: error: conflicting types for 'f'
overload.c:3: error: previous definition of 'f' was here
Run Code Online (Sandbox Code Playgroud)

但是,如果我在C++中编译相同的代码,它的工作原理.

有人能解释一下吗?

谢谢,Boda Cydo.

c overloading

3
推荐指数
1
解决办法
1036
查看次数

C99 预处理器中的 static_if

是否可以在 C99 中实现 static_if?

#define STATIC_IF(COND, ...) \
     if (COND) MACRO1(__VA_ARGS__); \
     else MACRO2(__VA_ARGS__);
Run Code Online (Sandbox Code Playgroud)

我如何STATIC_IF(…)在这里正确实施?根据COND参数,要么应该传递给MACRO1要么MACRO2,但两个宏的参数看起来不同。COND是静态可测试的,类似于sizeof (…) > 42.

  • #if COND然后#define STATIC_IF MACRO1……不适用于我的用例。
  • 我不能使用编译器特定的解决方案。

c c99 c-preprocessor static-if

3
推荐指数
1
解决办法
3287
查看次数

Octave/MATLAB中的deal()函数有什么意义?

一些参考代码使用该功能deal(),如

[a, b, c] = deal (1,2,3)
Run Code Online (Sandbox Code Playgroud)

如文档中所述(对于Octave和MATLAB),该函数只是将输入复制到输出. 为什么deal()在这种情况下使用,甚至一般? 我正在尝试学习"更正确"的MATLAB/Octave用法,并想知道我是否遗漏了一些重要内容.也许,这是用法......

  • 传统的风格或惯用,代替简单的赋值,a=1, b=2, c=3或更像是神秘的列表 - 解包单元格数组[a,b,c] = {1,2,3}{:},但比Python 参数解包更受限制,就像这个问题一样?
  • 对于一些更优雅的功能有用 - 例如,"深"与"浅"复制,如果这样的概念在这里存在,如果deal()用于复杂/可变参数?

我也理解单一论证,[a,b,c]=deal(42)但这基本上是a=b=c=42,并且[a,b,c]=deal(x)分配x给所有人,而不是x每个人的元素.

或者也许只是因为我过度思考这个功能的微不足道的使用.

matlab octave

3
推荐指数
1
解决办法
1186
查看次数

初始化c风格的结构

我有一个标题定义了c样式结构,它将通过c ++ DLL的边界传递.此头文件和DLL可能会被c ++,java和c应用程序使用.我想以某种方式初始化这些结构,允许用户指定参数的子集,其余的将被赋予默认值.

我正在考虑在标题中创建一系列初始化函数,这将引用它们将初始化的结构以及可以设置的所有成员的参数."初始化"函数将使用重载(基于传入的结构引用)来确保调用正确的函数.我还计划使用默认参数来设置默认值.我想这些功能必须是全局的.

这是一个好方法吗?还有更好的选择吗?谢谢

c c++ dll struct

2
推荐指数
1
解决办法
276
查看次数

功能取决于C中的数据类型

是否有可能在C中定义依赖于数据类型的函数.我想定义一个函数,它使用不同的过程,取决于1d数组或2d数组作为参数.

c

2
推荐指数
1
解决办法
81
查看次数

printf支持函数重载在C?

可能重复:
C是否支持重载?

我想知道printf是否支持C中的函数重载,因为在一个C程序中可以以多种方式使用相同的printf函数.

c

1
推荐指数
1
解决办法
3203
查看次数