如何在c 中留下一个声明的函数,例如haskell中的``undefined''
How to leave a declared function undefined in C++ like with `undefined` in Haskell?
haskell中有一个称为 undefined
的常数,您可以使用该常数在不定义它的情况下声明功能(即带有空白的功能原型),如 square
square :: Int -> Int -- declaration
square = undefined -- empty definition
main = putStrLn.show.square $ 3
这对于将工作推迟到square
上非常有用,并专注于首先获得main
函数,因为Haskell编译器确保整个文件编译了整个文件,就好像定义了square
一样。
C 等效是
#import <iostream>
int square(int x){
//TODO incomplete
return 0;
}
int main() {
std::cout << square(3);
}
我的意图是单独调用像clang++
这样的编译器作为main
的TypeChecker,然后稍后在square
上工作。想象一下,square
确实是许多尚未定义的复杂函数之一,它们返回具有非平凡构造函数的复杂数据结构。我将不得不编写大量代码来创建可返回的对象,以使函数编译。
在C 中有一些类似于undefined
的东西吗?
谢谢@molbdnilo。使用throw
是简洁的,可以很好地工作:
int square(int x) {
throw("undefined");
}
您也可以使用以下声明:
int square(int x)
{
assert(0);
}
这具有无法捕获的优势,并且将永远失败。如果您忘记实施该功能,这将更好地保护您。
c 具有纯virtual
功能,用于抽象基类。
class foo {
virtual void bar() = 0;
};
无法调用函数foo::bar()
,实际上foo
甚至无法创建一个对象,但是可以在派生的foo
类中覆盖它。但是,您可以为其提供一个定义,该定义默认情况下是继承的。
C 中的另一件事与undefined
有些相似,是一个非初始化的函数指针。更安全,更现代的解决方案可能是lambda表达式或 static
流中止程序的存根功能。
undefined
在实际使用中的含义是:如果您尝试实际调用它,则将崩溃程序崩溃,但会正确编译并且将通过类型检查。对于单个对象文件,为在任何地方定义的函数声明extern
原型都可以完成工作。如果您要链接整个程序,则必须有某种定义(尽管功能指针可以以安全为代价),但可以是存根。
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- 将数字转换为字母(例如:123 转换为一二三)
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 如何计算数据类型的范围,例如int
- 这是否符合C++标准:双响双响,例如!!(-0.0).
- 如何将CMSampleBufferRef/CIImage/UIImage转换为像素,例如uint8_t[]
- 使用 make 编译 MPI,几个命名空间错误,例如"错误:未知类型名称'使用'?
- 如何使用文件中的文本,例如变量
- 输入值后,如何在一个括号下显示值,例如"{6,7,8,9}
- 给定一个类型,如何派生一个泛型更广泛的类型(例如,用于溢出安全求和)?
- 初学者问题:如何使用这些晦涩难懂的命令,例如C++中的'RenderWindow'
- C++:将值 int(例如:0x00AAFAD8)转换为指针(指针本身也是 0x00AAFAD8 值)
- 具有多种约束(例如重量、体积等)的背包
- 较高值 n 的分割错误(例如 n=999997)
- 我正在尝试制作一个程序,在添加 n 天(整数)后告诉一个人什么是一天(例如星期一等)
- 在标准中,模板参数的语法在哪里定义,例如,'std::function<int(char)>'?
- 从/到 UTF-8/UTF-16 的转换需要(例如:utf8 -> 代码点,然后代码点到 utf16)或(例如:utf8 -> utf16)?
- 计算车辆之间的距离并设置速度,使距离保持不变,例如 5 米
- 如何在c 中留下一个声明的函数,例如haskell中的``undefined''