的每个元素是什么意思?

What does each element of printf's #%ld! mean?

本文关键字:意思 是什么 元素      更新时间:2023-10-16
void* PrintHello(void *threadid)
{
long tid;
tid =(long)threadid;
printf("Hello World! It's me, thread #%ld!n",tid);
pthread_exit(NULL);
}

我想知道变量声明的每个元素代表什么,是否有更简单的方法(更具可读性/类似性)来打印f?

# =

% =

ld = 长整型

! = 不是?

= 换行符

此外,指针似乎在我们的幻灯片上以两种不同的方式编写。

有:

void* function_name(void* args)

还有:

void* function_name(void *args)

星号位置的意义是什么? 在这个例子中,哪个看起来是正确的?

当打印带有变量的东西时,你需要%声明这是var输入的位置。 # 只是一个常规字符。ld仅表示您输入的变量类型。在这种情况下,long.!也没有任何意义,它只是一个常规角色。此外,在打印var时,唯一重要的是(在这种情况下)是%和变量类型之间的事情,在这种情况下ldn只是您之前所说的新行。

星号位置不会更改任何内容。两者都是正确的。星号的原因只是告诉你它是一个指针

阅读编译器的文档以了解printf()。 或者在线文档,比如这个,或者这个。 文档将向您准确解释各种参数和占位符是什么。

在您的示例中,#!没有任何意义。 它们在任何格式说明符之外,因此它们只是文字字符数据,就像大多数格式字符串内容一样。 只有前面带有%的说明符才具有任何特殊含义。

%字符是一个转义字符,它告诉printf()处理以下ld说明符。printf()会将%ld替换为格式化字符串中tid变量的值。

也许你也有兴趣看到类似的C++语句?

此外,对于你们中的一些人来说,C++版本将解释 printf 格式信息的作用。


  • std::p rintf 默认将输出定向到 stdout。 C++使用 std::cout

  • ">
  • #"和"!"只是字符(两种形式)

因此,在C++:

std::cout << '#' << tid << "!n";

但是,我可能会使用:

std::cout << '#' << tid << '!' << std::endl;

笔记:

  • 您是否注意到没有 %ld? 编译器已经知道 tid 的类型(即 long int),所以你不需要像 std::p rintf 那样第二次向 std::cout 解释它。

  • 作为额外的好处,当有人将 tid 类型更改为 int32_t(或者可能是 int64_t,或者static_cast更改为更小的类型)时,cout 线不受影响。 快速,对于"长长无符号 int",%XXd 的 XX 是什么? 我们再也不查了。


星号位置的意义是什么?这看起来是 在这个例子中正确吗?

这两种形式都是"正确的"。 我更喜欢"*"形式,可能是因为我的背景(几乎没有"c"曝光)。

正如其他人已经说过的,%ld格式字符串"Hello World! It's me, thread #%ld!n"定义了放置long类型的变量的位置。#!是普通字符,n代表换行符(特殊字符反斜杠赋予后续字符特殊含义)。

但是当你在threadid类型为void*时分配long tid =(long)threadid时,代码中还有另一个问题,即指向某个非特定类型的指针。实际上,如果您知道threadid会指向长,则应编写long tid = *((long*)threadid)以取消引用指针并将其解释为特定类型的long;否则,您将分配指针值(即某个内存地址)。

这不是 C 语言的特定关键字。 让我通过分解来解释一下。

#%ld!n

等于

#   : Hash character to show count/numbers 
%ld : Specifier referencing a long integer that you want to show.
!   : Simple exclamatory character.
n  : New line