小编Pra*_*att的帖子

C/C++中的单引号,双引号和sizeof('a')

在C或C++中查看单引号与双引号的问题.我无法完全理解给出的解释,所以我写了一个程序:

#include <stdio.h>
int main()
{
  char ch = 'a';
  printf("sizeof(ch) :%d\n", sizeof(ch));
  printf("sizeof(\'a\') :%d\n", sizeof('a'));
  printf("sizeof(\"a\") :%d\n", sizeof("a"));
  printf("sizeof(char) :%d\n", sizeof(char));
  printf("sizeof(int) :%d\n", sizeof(int));
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我使用gcc和g ++编译它们,这些是我的输出:

GCC:

sizeof(ch)   : 1  
sizeof('a')  : 4  
sizeof("a")  : 2  
sizeof(char) : 1  
sizeof(int)  : 4  
Run Code Online (Sandbox Code Playgroud)

克++:

sizeof(ch)   : 1  
sizeof('a')  : 1  
sizeof("a")  : 2  
sizeof(char) : 1  
sizeof(int)  : 4  
Run Code Online (Sandbox Code Playgroud)

g ++输出对我有意义,我对此没有任何疑问.在gcc中,需要sizeof('a')与之不同的是sizeof(char)什么?背后有一些实际的原因还是只是历史?

同样在C中如果char并且'a'具有不同的大小,这是否意味着当我们编写时 char ch = …

c c++ gcc

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

头文件礼仪

当我创建一个将由多个开发人员使用的头文件时,根据其中使用的所有定义和声明,使该头文件自给自足是一种良好的编程习惯.

例如:

头文件1:types.h

#ifndef TYPES_H
#define TYPES_H
typedef unsigned int uint16
#endif
Run Code Online (Sandbox Code Playgroud)

头文件2:myheader.h

#ifndef MYHEADER_H
#define MYHEADER_H
uint16 myfunc(void);
#endif
Run Code Online (Sandbox Code Playgroud)

我在myheader.h中使用了uint16而没有包含types.h.因此,如果有人想在他们的源文件中包含myheader.h,他们应首先包含"types.h",然后包含"myheader.h".因此,这实际上是迫使开发人员按特定顺序包含头文件.我一直认为这是一种不好的做法,但我今天在我公司遇到了一些代码,在一个文件中声明了一个函数,你需要包含至少4个其他头文件.所以现在我很困惑,我错过了什么,是否有任何地方可以认为这是预期的行为.

c c++

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

轮询与中断

我对中断有一个基本的疑问.想象一下没有任何中断的计算机,所以为了让它进行I/O,CPU必须轮询*键盘以进行按键,鼠标按键定时等.现在,如果它有中断,CPU将继续检查中断线是否定期变高(或低).那么如何通过使用中断来节省CPU周期.根据我的理解而不是现在检查设备,我们正在检查中断线.有人可以解释我错误的基本逻辑.

*这里通过轮询我并不是说CPU处于忙碌状态.引用维基百科"轮询还指的是重复检查设备是否准备就绪的情况,如果不是,则计算机返回到不同的任务"

operating-system interrupt polling

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

从c中的函数返回字符串

我很困惑我们如何能够从函数返回字符串.

char* someFunction()
{
  return "Hello, World"
}
Run Code Online (Sandbox Code Playgroud)

上面的return语句不应抛出"函数返回局部变量的地址",它与函数有什么不同:

char* newFunction()
{
  char temp[] = "Hello, World";
  return temp;
}
Run Code Online (Sandbox Code Playgroud)

实际上确实给出了上面提到的警告.

c string

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

将结构类型转换为整数时出错

我收到了错误

 error: aggregate value used where an integer was expected
Run Code Online (Sandbox Code Playgroud)

在编译此代码时:

#include <stdio.h>
typedef unsigned long U32; 
typedef struct hello_s
{
  U32   a:8;
  U32   b:24;
}hello_t;

int main()
{
  hello_t str;
  U32 var;

  str.a = 0xAA;
  str.b = 0xAAA;
  var = (U32)str;
  printf("var : %lX\n", var);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

有人可以解释错误的含义,以及我做错了什么.

编辑:我知道这是一个愚蠢的事情.我想知道的是为什么编译器会为此而哭泣.为什么它只能将前32位分配给整数.

c casting

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

在python字符串上使用切片运算符[:]不会导致越界错误

我刚刚开始学习python,并且正在使用slice(:)运算符和字符串。由于某些原因,如果我指定了无效的索引,然后是切片运算符,则不会给出“超出范围”错误。

>>> s='Hello'
>>> print s[5]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range

>>> print s[5:]
//Prints just a newline, no error
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下为什么我在第二种情况下没有出错。

python string

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

标签 统计

c ×4

c++ ×2

string ×2

casting ×1

gcc ×1

interrupt ×1

operating-system ×1

polling ×1

python ×1