原文:http://cocre.com/?p=873
前两天,Neo写了一篇《语言的歧义》其使用C语言讨论了一些语言的歧义。大家应该也顺便了解了一下C语言中的很多不可思异的东西,可能也是你从未注意到的东西。
是的,C语言并不简单,让我们来看看下面这些示例:
-
为什么下面的代码会返回0?(这题应该很简单吧)
int x;
return x == (1 && x);
本题主要是关于C/C++中变量初始化的问题。
-
为什么下面的代码会返回0而不是-1?
return ((1 - sizeof(int)) >> 32);
答案:sizeof 是一个unsigned的类型,所以……
-
代码作用域是一件很诡异的事,下面这个函数返回值是什么?
int x = 5;
int f() {
int x = 3;
{
extern int x;
return x;
}
}
答案:5
-
函数和函数指针可以相互转换。下面的语句哪些是合法的?
int (*pf)(void);
int f(void)
{
pf = &f; // 没问题
pf = ***f; // 取址?
pf(); // 函数指针可以调用?
(****pf)(); // 这又是什么?
(***************f)(); // 这个够变态了吧?
}
答案:全部合法。
-
初始化可能是ISO C中最难的部分了。无论是MSVC 还是GCC 都没有完全实现。GCC 可能更接近标准。在下面的代码中,i.nested.y 和i.nested.z的最终值是什么?
struct {
int x;
struct {
int y, z;
} nested;
} i = { .nested.y = 5, 6, .x = 1, 2 };
答案:2和6
-
下面这个示例是C语言的痛,main函数返回值是什么?
typedef struct
{
char *key;
char *value;
} T1;
typedef struct
{
long type;
char *value;
} T3;
T1 a[] =
{
{
"",
((char *)&((T3) {1, (char *) 1}))
}
};
int main() {
T3 *pt3 = (T3*)a[0].value;
return pt3->value;
}
答案:1(你知道为什么吗?)
-
下面这个例就更变态了。在GCC的文档中,这个语法是合法的,但是不知道为什么GCC并没有实现。下面的代码返回 2.
return ((int []){1,2,3,4})[1];
-
在下面的这个示例中,有一个“bar” 函数及其函数指针 “pbar” 的两个拷贝(static 类型一般作用于语句块或文件域).
int foo() {
static bar();
static (*pbar)() = bar;
}
static bar() {
return 1;
}
static (*pbar)() = 0;
-
下面的这个函数返回值是什么?取决于编译器是先处理unsigned long转型,还是负号。
unsigned long foo() {
return (unsigned long) - 1 / 8;
}
如果是:((unsigned long) - 1) / 8,那将是一个很大的数。
如果是: (unsigned long) (- 1 / 8 ), 那将是 0
是的,这样使用C语言可能很奇怪,不过我们可以从另一方面了解C语言的很多我们不常注意的特性。C语言其实并不容易。
分享到:
相关推荐
谁说C语言很简单谁说C语言很简单谁说C语言很简单谁说C语言很简单谁说C语言很简单谁说C语言很简单谁说C语言很简单谁说C语言很简单谁说C语言很简单谁说C语言很简单谁说C语言很简单谁说C语言很简单谁说C语言很简单谁说...
大学C语言学生简易管理系统大学C语言学生简易管理系统大学C语言学生简易管理系统大学C语言学生简易管理系统大学C语言学生简易管理系统大学C语言学生简易管理系统大学C语言学生简易管理系统大学C语言学生简易管理系统...
掌握了C语言,可以说你就掌握了很多门语言,经过简单的学习,你就可以用这些新型的语言去开发了,这个再一次验证了C语言是程序设计的重要基础。还有啊,多说一点:即使现在招聘程序员,考试都是考C语言,你想加入it...
根据给定文件的信息,我们可以提炼出以下关于使用C语言编写简单计算器程序的相关知识点: ### 1. C语言基础概述 - **定义与背景**:C语言是一种通用的、过程式的编程语言,它由Dennis Ritchie于1972年在贝尔实验室...
c语言入门很简单, 从入门到精通 ,学习c语言不在难
对于初学者来说,“C语言入门很简单”这一观点既是对学习态度的一种鼓励,也是对C语言特性的一种准确描述。本文将从C语言的基本概念入手,详细介绍其核心语法、常见数据类型、控制结构以及函数等方面的知识点,帮助...
在“C语言基础 简单C语言应用程序”这个主题中,我们将深入探讨C语言的基础知识,了解如何编写简单的C语言应用程序。 首先,C语言的基础包括数据类型。C语言支持基本的数据类型如整型(int)、浮点型(float、...
c语言小游戏c语言项目源码大全合集(60例): c语言24点游戏源码 c语言Turbo C下写的俄罗斯方块 c语言UDP传输系统源码 c语言万年历源码 c语言五子棋源码 c语言俄罗斯方块 c语言做的一个任务管理器 c语言做的播放器...
如何创建C语言程序C语言程序组成函数定义格式如何运行编写好的程序C语言程序练习初学者如何避免程序出现BUG多语言对比注释就是这么简单?什么是关键字?什么是标识符?什么是数据?C语言数据类型什么是常量?C语言变量...
在本项目"基于C语言的简易连连看"中,我们主要探讨如何利用C语言这一基础编程语言来实现一个简单的电脑游戏——连连看。C语言以其高效、简洁和强大的底层控制能力,是许多初学者和专业程序员学习编程的首选。在这个...
在本项目"基于C语言简易计算器"中,我们主要探讨如何使用C语言这一基础编程语言来实现一个简单的计算器程序。这个工程旨在帮助初学者更好地理解和应用C语言,并且融入了部分数据结构的概念,使得学习更加深入。下面...
掌握了C语言,可以说你就掌握了很多门语言,经过简单的学习,你就可以用这些新型的语言去 开发了,这个再一次验证了C语言是程序设计的重要基础。还有啊,多说一点:即使现在招聘程序员,考试都是考C语言,你想加入it...
《C语言实现简单计算器及其实验报告》 C语言是一种强大的编程语言,被广泛应用于系统开发、软件工程以及教育领域。本资源是针对大一学生的一次课程设计任务,旨在通过实现一个简单的计算器来帮助学生深入理解和掌握...
收集整理的简单易懂的60套C语言小游戏源代码(可运行,供学习设计参考): c语言24点游戏源码 c语言Turbo C下写的俄罗斯方块 c语言UDP传输系统源码 c语言万年历源码 c语言五子棋源码 c语言俄罗斯方块 c语言做的一个...
使用C语言编写的简单的图书管理系统 ,实现一般图书管理资源鉴定的功能
《C语言很简单》这个压缩包文件,显然包含了与C语言学习相关的资料,可能是教程、示例代码或习题集。虽然描述中提到“C++”的标签,但根据标题,我们主要聚焦在C语言上。C语言是计算机科学的基础编程语言,由Dennis ...
【标题】:“C语言之简单的EasyX” 在编程领域,C语言是一种基础且强大的编程语言,广泛应用于系统开发、软件构建以及...这对于初学者来说是一个很好的实践项目,可以帮助他们深入理解C语言和图形编程的基本概念。
通过C语言实现简单的五子棋双人对战源码,代码量小,结构简单,适合C语言刚入门者学习
标题中的“Matlab调用C语言程序简单实例”是指在MATLAB环境中,通过MEX文件(MATLAB Exchange)来调用C语言编写的程序。MATLAB是一种强大的数值计算和符号计算软件,它提供了丰富的内建函数和工具箱,但有时用户可能...