惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
N
Netflix TechBlog - Medium
博客园 - 叶小钗
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
V
V2EX
IT之家
IT之家
J
Java Code Geeks
Hacker News - Newest:
Hacker News - Newest: "LLM"
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
GbyAI
GbyAI
D
Docker
S
Secure Thoughts
Recent Announcements
Recent Announcements
Webroot Blog
Webroot Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
云风的 BLOG
云风的 BLOG
博客园_首页
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Security Archives - TechRepublic
Security Archives - TechRepublic
酷 壳 – CoolShell
酷 壳 – CoolShell
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
N
News | PayPal Newsroom
S
Security @ Cisco Blogs
I
InfoQ
Last Week in AI
Last Week in AI
SecWiki News
SecWiki News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
W
WeLiveSecurity
T
Troy Hunt's Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Attack and Defense Labs
Attack and Defense Labs
美团技术团队
T
The Blog of Author Tim Ferriss
Google DeepMind News
Google DeepMind News
Martin Fowler
Martin Fowler
B
Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Scott Helme
Scott Helme
T
Tor Project blog
Know Your Adversary
Know Your Adversary
有赞技术团队
有赞技术团队
Hugging Face - Blog
Hugging Face - Blog
Recorded Future
Recorded Future
C
Cyber Attacks, Cyber Crime and Cyber Security
AI
AI
G
Google Developers Blog

C

各位大佬, C 語言該怎麼練習啊 - V2EX 分享一个代码优化导致的死循环 - V2EX 人再笨还能写不出内存安全的 C? - V2EX 想念 C - V2EX C11 的 _Generic,现实当中用得多不多?(尤其是公司项目) 坑爹的 GBK:大家都应该去用 UTF-8 - V2EX 分享一个用 AI 学习 C 语言的例子 一个简单的 C 程序,但是不明白区别在哪里 这段话是否正确?「取余这个运算,只有 Python 是对的。当初 C 这个老师教错了,那么一大票学生也就只敢跟着老师错。只有 Python 敢于站出来坚持正确答案。」 - V2EX C 中可变参数如何直接传递到 printf() - V2EX C 的内存打印实现 - V2EX 函数能否实现透传不定长度参数,最终由 printf 打印 请大佬帮忙修改一份 elf 文件里的数值 - V2EX Linux 上 C 的程序遇到个异常退出问题,局部变量大小有限制?? C 语言新手求助:如何在 vscode 中使用第三方库? - V2EX 将资源嵌入到可执行文件中并保持目录结构 - V2EX 一个简单实用的 C 工程示例, 附简洁的 Makefile - V2EX 关于 C 语言的相关问题 - V2EX 轮子更新: C/C++ 跨平台小工具库 - V2EX 为什么下列程序进行的是无符号乘法? - V2EX 用 riscv64- Linux -gnu-gcc 编译的 c 文件为啥能在 x8664 下运行? - V2EX char *s = "0123"和 char s[] = "0123"的区别 有人能完整地解释一下 int (*daytab) [13]和 int *daytab[13]吗 在 c 语言中, int a;是 declaration 还是 definition - V2EX 一个简单(奇怪)的 C 语言问题 - V2EX c 语言中打印指针的值打印的是 OS 分配的虚拟地址的值吗?要怎么知道 OS 给这个 c 程序进程分配的虚拟地址的大小呢? - V2EX gcc 是怎么找到 system 函数的定义(实现)的? - V2EX 用 C 实现轻量级表达式完成策略定制化和模板内容生成 - V2EX c 语言是如何给汉字编码的? - V2EX 还是不太理解 C 静态库和动态库? - V2EX 开源 C 库 bfdev: MPI 大数运算 - V2EX C 语言中的面向切面编程(AOP) - V2EX 网络语言污染/扭曲专业术语名词——《为什么 c 语言这么抽象?》 - V2EX C 语言函数资源开销可观测性 - V2EX C 语言用户态函数可观测性 - V2EX 在 C 中,如何正确拷贝字符串 - V2EX c 语言中自定义 section 段问题请教 - V2EX C 语言的源码过滤功能的工具 - V2EX 求助 libcurl 的 curl_easy_pause() 使用方法 - V2EX 各位有什么深入了解 C 语言的书嘛? - V2EX 不熟悉 cmake,请教一下多模块项目的 cmake 写法 - V2EX 大家有没有值得推荐的 c 语言的开源项目,用来学习或者贡献的。 - V2EX 求帮忙看一下这个 C 代码为什么会段错误! - V2EX int 型返回值所能表达的内容极限 - V2EX 刚刚突然感受到了 C 语言指针的神奇之处 - V2EX 开源 C 语言库 Melon 之模块选择性编译 - V2EX 这年头搞 c 还有前途吗 看看我的 leetcode 第 151 题目 反转字符串 - V2EX 百变开源 C 语言库日志模块 - V2EX 最好用的 C 语言 JSON 解析器 - V2EX
我这段 C 代码可以在编译时候输出结构体的大小,你们还有什么好点子, show me the code! - V2EX
Exxfire · 2025-02-13 · via C

这是一个创建于 486 天前的主题,其中的信息可能已经有所发展或是发生改变。

#include <stdio.h>

struct X
{
    int a;
    char c[10];
    short d;
};
char checker(int a)
{
    (void)a;
    return '1';
}

#define STRINGIFY(x) #x
#define TOSTRING(x) STRINGIFY(x)

#define TEST(x)                                                              \
    do                                                                       \
    {                                                                        \
        char checkSizeOfInt[sizeof(x)] = {checker(&checkSizeOfInt)};         \
        _Pragma(TOSTRING(message("Value: " #x)))                             \
    } while (0);

int main() {
    TEST(struct X);
    return 0;
}
pipapa

1

pipapa      2025 年 2 月 13 日

哪些编译器可以

Exxfire

2

Exxfire      2025 年 2 月 13 日

@pipapa 我用的 gcc 编译,其它没试。gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.12)

henix

3

henix      2025 年 2 月 13 日

在 gcc 14 上修改之后会输出这些:

···
test.c: In function 'main':
test.c:21:51: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
21 | char checkSizeOfInt[sizeof(x)] = {checker((int)&checkSizeOfInt)}; \
| ^
test.c:26:5: note: in expansion of macro 'TEST'
26 | TEST(struct X);
| ^~~~
test.c:22:9: note: '#pragma message: Value: struct X'
22 | _Pragma(TOSTRING(message("Value: " #x))) \
| ^~~~~~~
test.c:26:5: note: in expansion of macro 'TEST'
26 | TEST(struct X);
| ^~~~
···

没看到什么结构体大小啊

Exxfire

6

Exxfire      2025 年 2 月 13 日

@henix
var_para_num_test.c: In function ‘main’:
var_para_num_test.c:21:51: warning: passing argument 1 of ‘checker’ makes integer from pointer without a cast [-Wint-conversion]
char checkSizeOfInt[sizeof(x)] = {checker(&checkSizeOfInt)}; \
^
var_para_num_test.c:26:5: note: in expansion of macro ‘TEST’
TEST(struct X);
^
var_para_num_test.c:9:6: note: expected ‘int’ but argument is of type ‘char (*)[16]’
char checker(int a)
^
var_para_num_test.c:26:17: note: #pragma message: Value: struct X
TEST(struct X);
^
var_para_num_test.c:21:36: note: in definition of macro ‘TEST’
char checkSizeOfInt[sizeof(x)] = {checker(&checkSizeOfInt)};

Exxfire

8

Exxfire      2025 年 2 月 14 日

@yolee599 在编译阶段获取信息意味着不用等待程序编译完成,并执行,可以节省时间,提升效率。
当然,我只是觉得这么干很有意思。