- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我一直在思考用 C 语言最简单地表达主要功能的最诚实的方式(是的,它很琐碎而且通常不有趣,但对我来说很有趣)。
很长一段时间,直到今天,我更喜欢定义 main 如下:
int main(int argc, char **argv)
{
return 0;
}
我的问题是我通常从不使用这些参数,所以它使参数明确,即使我在代码中不太关心它们以将它们写出来。
所以我开始做
int main()
{
return 0;
}
这是诚实的,因为它没有像许多人在 int main(void){}
定义中那样明确表示该函数没有参数,我对此很满意。
然而,我只是有一个想法,使用 main 的可变参数定义让 main 的定义对我来说更舒服,因为它“看起来”对我来说好像函数确实有参数,但我现在不关心它们.
int main(...)
{
return 0;
}
这种对……的符号滥用有什么问题吗?也就是说,... 旨在用于模式的功能(,可以从中推断出后续参数数量的参数,...)。而这个 main 不符合这种模式,从技术上讲是对符号的误用。
我理解这种表示法会误导其他读者(...有点高级概念,被滥用会使它更具误导性),并且在共享代码时我仍然会更喜欢其他原型(prototype)。我只是好奇这样做是否有效 C。
我的问题是:
是 main 可移植的可变参数定义,还是某些编译器可能不喜欢它。
通常可以进行这种定义吗,或者这样做会产生运行时/编译时后果吗?
最佳答案
不,那是绝对错误的。
这是错误的,因为它是无效的语法。来自 n1548 第 6.7.6 节:
parameter-type-list:
parameter-list
parameter-list , ...
parameter-list:
parameter-declaration
parameter-list , parameter-declaration
根据 C 标准,如果您在函数参数中使用 ...
,您必须在它之前至少有一个其他参数。别的都是无效的 C。从语法可以看出,...
只能出现在逗号,
和parameter-list之后, parameter-list 不能为空。
您的编译器可能会接受它,但这并不意味着什么。编译器接受许多无效的 C 内容,并且无论如何都会愉快地编译它们。
关于c - 将 main 定义为 int main(...){} 是否有任何问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36522931/
我有一个 if 语句,如下所示 if (not(fullpath.lower().endswith(".pdf")) or not (fullpath.lower().endswith(tup
然而,在 PHP 中,可以: only appears if $foo is true. only appears if $foo is false. 在 Javascript 中,能否在一个脚
XML有很多好处。它既是机器可读的,也是人类可读的,它具有标准化的格式,并且用途广泛。 它也有一些缺点。它是冗长的,不是传输大量数据的非常有效的方法。 XML最有用的方面之一是模式语言。使用模式,您可
由于长期使用 SQL2000,我并没有真正深入了解公用表表达式。 我给出的答案here (#4025380)和 here (#4018793)违背了潮流,因为他们没有使用 CTE。 我很欣赏它们对于递
我有一个应用程序: void deleteObj(id){ MyObj obj = getObjById(id); if (obj == null) { throw n
我的代码如下。可能我以类似的方式多次使用它,即简单地说,我正在以这种方式管理 session 和事务: List users= null; try{ sess
在开发J2EE Web应用程序时,我通常会按以下方式组织我的包结构 com.jameselsey.. 控制器-控制器/操作转到此处 服务-事务服务类,由控制器调用 域-应用程序使用的我的域类/对象 D
这更多是出于好奇而不是任何重要问题,但我只是想知道 memmove 中的以下片段文档: Copying takes place as if an intermediate buffer were us
路径压缩涉及将根指定为路径上每个节点的新父节点——这可能会降低根的等级,并可能降低路径上所有节点的等级。有办法解决这个问题吗?有必要处理这个吗?或者,也许可以将等级视为树高的上限而不是确切的高度? 谢
我有两个类,A 和 B。A 是 B 的父类,我有一个函数接收指向 A 类型类的指针,检查它是否也是 B 类型,如果是将调用另一个函数,该函数接受一个指向类型 B 的类的指针。当函数调用另一个函数时,我
有没有办法让 valgrind 使用多个处理器? 我正在使用 valgrind 的 callgrind 进行一些瓶颈分析,并注意到我的应用程序中的资源使用行为与在 valgrind/callgrind
假设我们要使用 ReaderT [(a,b)]超过 Maybe monad,然后我们想在列表中进行查找。 现在,一个简单且不常见的方法是: 第一种可能性 find a = ReaderT (looku
我的代码似乎有问题。我需要说的是: if ( $('html').attr('lang').val() == 'fr-FR' ) { // do this } else { // do
根据this文章(2018 年 4 月)AKS 在可用性集中运行时能够跨故障域智能放置 Pod,但尚不考虑更新域。很快就会使用更新域将 Pod 放入 AKS 中吗? 最佳答案 当您设置集群时,它已经自
course | section | type comart2 : bsit201 : lec comart2 :
我正在开发自己的 SDK,而这又依赖于某些第 3 方 SDK。例如 - OkHttp。 我应该将 OkHttp 添加到我的 build.gradle 中,还是让我的 SDK 用户包含它?在这种情况下,
随着 Rust 越来越充实,我对它的兴趣开始激起。我喜欢它支持代数数据类型,尤其是那些匹配的事实,但是对其他功能习语有什么想法吗? 例如标准库中是否有标准过滤器/映射/归约函数的集合,更重要的是,您能
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 9 年前。 Improve
我一直在研究 PHP 中的对象。我见过的所有示例甚至在它们自己的对象上都使用了对象构造函数。 PHP 会强制您这样做吗?如果是,为什么? 例如: firstname = $firstname;
...比关联数组? 关联数组会占用更多内存吗? $arr = array(1, 1, 1); $arr[10] = 1; $arr[] = 1; // <- index is 11; does the
我是一名优秀的程序员,十分优秀!