C-struct/union/enum

C语言结构体与联合体成员规则
本文探讨了C语言中结构体(struct)和联合体(union)必须至少包含一个成员的规定,以及枚举(enum)可以为空的特殊情况。通过示例代码详细解释了结构体、联合体和枚举的定义及使用。

在C语言中,要求一个结构或联合至少有一个成员,enum无所谓。

struct A//报错,C 要求一个结构或联合至少有一个成员
{
};

union B//报错,C 要求一个结构或联合至少有一个成员
{
};

enum C//ok
{
};//enum C的大小仍旧为4
struct A
{
	char a;
	int b;
};

union B
{
	char a;
	int b;
};

enum C
{
	a,
	b
};
Executing action: all (aliases: build) Running ninja in directory /home/wokwi/esp-project-esp32s3/build Executing "ninja all"... [1/9] Performing build step for 'bootloader' [1/1] cd /home/wokwi/esp-project-esp32s3/build/bootloader/esp-idf/esptool_py && /opt/esp/python_env/idf5.3_py3.10_env/bin/python /opt/esp/idf/components/partition_table/check_sizes.py --offset 0x8000 bootloader 0x0 /home/wokwi/esp-project-esp32s3/build/bootloader/bootloader.bin Bootloader binary size 0x5260 bytes. 0x2da0 bytes (36%) free. [2/7] Building C object esp-idf/main/CMakeFiles/__idf_main.dir/src/main.c.obj FAILED: esp-idf/main/CMakeFiles/__idf_main.dir/src/main.c.obj ccache /opt/esp/tools/xtensa-esp-elf/esp-13.2.0_20240530/xtensa-esp-elf/bin/xtensa-esp32s3-elf-gcc -DESP_PLATFORM -DIDF_VER=\"v5.3.1\" -DMBEDTLS_CONFIG_FILE=\"mbedtls/esp_config.h\" -DSOC_MMU_PAGE_SIZE=CONFIG_MMU_PAGE_SIZE -DSOC_XTAL_FREQ_MHZ=CONFIG_XTAL_FREQ -DUNITY_INCLUDE_CONFIG_H -D_GLIBCXX_HAVE_POSIX_SEMAPHORE -D_GLIBCXX_USE_POSIX_SEMAPHORE -D_GNU_SOURCE -D_POSIX_READER_WRITER_LOCKS -I/home/wokwi/esp-project-esp32s3/build/config -I/home/wokwi/esp-project-esp32s3/main/src -I/opt/esp/idf/components/newlib/platform_include -I/opt/esp/idf/components/freertos/config/include -I/opt/esp/idf/components/freertos/config/include/freertos -I/opt/esp/idf/components/freertos/config/xtensa/include -I/opt/esp/idf/components/freertos/FreeRTOS-Kernel/include -I/opt/esp/idf/components/freertos/FreeRTOS-Kernel/portable/xtensa/include -I/opt/esp/idf/components/freertos/FreeRTOS-Kernel/portable/xtensa/include/freertos -I/opt/esp/idf/components/freertos/esp_additions/include -I/opt/esp/idf/components/esp_hw_support/include -I/opt/esp/idf/components/esp_hw_support/include/soc -I/opt/esp/idf/components/esp_hw_support/include/soc/esp32s3 -I/opt/esp/idf/components/esp_hw_support/dma/include -I/opt/esp/idf/components/esp_hw_support/ldo/include -I/opt/esp/idf/components/esp_hw_support/port/esp32s3/. -I/opt/esp/idf/components/esp_hw_support/port/esp32s3/include -I/opt/esp/idf/components/heap/include -I/opt/esp/idf/components/log/include -I/opt/esp/idf/components/soc/include -I/opt/esp/idf/components/soc/esp32s3 -I/opt/esp/idf/components/soc/esp32s3/include -I/opt/esp/idf/components/hal/platform_port/include -I/opt/esp/idf/components/hal/esp32s3/include -I/opt/esp/idf/components/hal/include -I/opt/esp/idf/components/esp_rom/include -I/opt/esp/idf/components/esp_rom/include/esp32s3 -I/opt/esp/idf/components/esp_rom/esp32s3 -I/opt/esp/idf/components/esp_common/include -I/opt/esp/idf/components/esp_system/include -I/opt/esp/idf/components/esp_system/port/soc -I/opt/esp/idf/components/esp_system/port/include/private -I/opt/esp/idf/components/xtensa/esp32s3/include -I/opt/esp/idf/components/xtensa/include -I/opt/esp/idf/components/xtensa/deprecated_include -I/opt/esp/idf/components/lwip/include -I/opt/esp/idf/components/lwip/include/apps -I/opt/esp/idf/components/lwip/include/apps/sntp -I/opt/esp/idf/components/lwip/lwip/src/include -I/opt/esp/idf/components/lwip/port/include -I/opt/esp/idf/components/lwip/port/freertos/include -I/opt/esp/idf/components/lwip/port/esp32xx/include -I/opt/esp/idf/components/lwip/port/esp32xx/include/arch -I/opt/esp/idf/components/lwip/port/esp32xx/include/sys -I/opt/esp/idf/components/esp_driver_gpio/include -I/opt/esp/idf/components/esp_pm/include -I/opt/esp/idf/components/mbedtls/port/include -I/opt/esp/idf/components/mbedtls/mbedtls/include -I/opt/esp/idf/components/mbedtls/mbedtls/library -I/opt/esp/idf/components/mbedtls/esp_crt_bundle/include -I/opt/esp/idf/components/mbedtls/mbedtls/3rdparty/everest/include -I/opt/esp/idf/components/mbedtls/mbedtls/3rdparty/p256-m -I/opt/esp/idf/components/mbedtls/mbedtls/3rdparty/p256-m/p256-m -I/opt/esp/idf/components/esp_app_format/include -I/opt/esp/idf/components/esp_bootloader_format/include -I/opt/esp/idf/components/app_update/include -I/opt/esp/idf/components/bootloader_support/include -I/opt/esp/idf/components/bootloader_support/bootloader_flash/include -I/opt/esp/idf/components/esp_partition/include -I/opt/esp/idf/components/efuse/include -I/opt/esp/idf/components/efuse/esp32s3/include -I/opt/esp/idf/components/esp_mm/include -I/opt/esp/idf/components/spi_flash/include -I/opt/esp/idf/components/pthread/include -I/opt/esp/idf/components/esp_timer/include -I/opt/esp/idf/components/esp_driver_gptimer/include -I/opt/esp/idf/components/esp_ringbuf/include -I/opt/esp/idf/components/esp_driver_uart/include -I/opt/esp/idf/components/vfs/include -I/opt/esp/idf/components/app_trace/include -I/opt/esp/idf/components/esp_event/include -I/opt/esp/idf/components/nvs_flash/include -I/opt/esp/idf/components/esp_driver_pcnt/include -I/opt/esp/idf/components/esp_driver_spi/include -I/opt/esp/idf/components/esp_driver_mcpwm/include -I/opt/esp/idf/components/esp_driver_ana_cmpr/include -I/opt/esp/idf/components/esp_driver_i2s/include -I/opt/esp/idf/components/sdmmc/include -I/opt/esp/idf/components/esp_driver_sdmmc/include -I/opt/esp/idf/components/esp_driver_sdspi/include -I/opt/esp/idf/components/esp_driver_sdio/include -I/opt/esp/idf/components/esp_driver_dac/include -I/opt/esp/idf/components/esp_driver_rmt/include -I/opt/esp/idf/components/esp_driver_tsens/include -I/opt/esp/idf/components/esp_driver_sdm/include -I/opt/esp/idf/components/esp_driver_i2c/include -I/opt/esp/idf/components/esp_driver_ledc/include -I/opt/esp/idf/components/esp_driver_parlio/include -I/opt/esp/idf/components/esp_driver_usb_serial_jtag/include -I/opt/esp/idf/components/driver/deprecated -I/opt/esp/idf/components/driver/i2c/include -I/opt/esp/idf/components/driver/touch_sensor/include -I/opt/esp/idf/components/driver/twai/include -I/opt/esp/idf/components/driver/touch_sensor/esp32s3/include -I/opt/esp/idf/components/esp_phy/include -I/opt/esp/idf/components/esp_phy/esp32s3/include -I/opt/esp/idf/components/esp_vfs_console/include -I/opt/esp/idf/components/esp_netif/include -I/opt/esp/idf/components/wpa_supplicant/include -I/opt/esp/idf/components/wpa_supplicant/port/include -I/opt/esp/idf/components/wpa_supplicant/esp_supplicant/include -I/opt/esp/idf/components/esp_coex/include -I/opt/esp/idf/components/esp_wifi/include -I/opt/esp/idf/components/esp_wifi/wifi_apps/include -I/opt/esp/idf/components/esp_wifi/wifi_apps/nan_app/include -I/opt/esp/idf/components/esp_wifi/include/local -I/opt/esp/idf/components/unity/include -I/opt/esp/idf/components/unity/unity/src -I/opt/esp/idf/components/cmock/CMock/src -I/opt/esp/idf/components/console -I/opt/esp/idf/components/http_parser -I/opt/esp/idf/components/esp-tls -I/opt/esp/idf/components/esp-tls/esp-tls-crypto -I/opt/esp/idf/components/esp_adc/include -I/opt/esp/idf/components/esp_adc/interface -I/opt/esp/idf/components/esp_adc/esp32s3/include -I/opt/esp/idf/components/esp_adc/deprecated/include -I/opt/esp/idf/components/esp_driver_isp/include -I/opt/esp/idf/components/esp_driver_cam/include -I/opt/esp/idf/components/esp_driver_cam/interface -I/opt/esp/idf/components/esp_driver_jpeg/include -I/opt/esp/idf/components/esp_driver_ppa/include -I/opt/esp/idf/components/esp_eth/include -I/opt/esp/idf/components/esp_gdbstub/include -I/opt/esp/idf/components/esp_hid/include -I/opt/esp/idf/components/tcp_transport/include -I/opt/esp/idf/components/esp_http_client/include -I/opt/esp/idf/components/esp_http_server/include -I/opt/esp/idf/components/esp_https_ota/include -I/opt/esp/idf/components/esp_https_server/include -I/opt/esp/idf/components/esp_psram/include -I/opt/esp/idf/components/esp_lcd/include -I/opt/esp/idf/components/esp_lcd/interface -I/opt/esp/idf/components/esp_lcd/rgb/include -I/opt/esp/idf/components/protobuf-c/protobuf-c -I/opt/esp/idf/components/protocomm/include/common -I/opt/esp/idf/components/protocomm/include/security -I/opt/esp/idf/components/protocomm/include/transports -I/opt/esp/idf/components/protocomm/include/crypto/srp6a -I/opt/esp/idf/components/protocomm/proto-c -I/opt/esp/idf/components/esp_local_ctrl/include -I/opt/esp/idf/components/espcoredump/include -I/opt/esp/idf/components/espcoredump/include/port/xtensa -I/opt/esp/idf/components/wear_levelling/include -I/opt/esp/idf/components/fatfs/diskio -I/opt/esp/idf/components/fatfs/src -I/opt/esp/idf/components/fatfs/vfs -I/opt/esp/idf/components/idf_test/include -I/opt/esp/idf/components/idf_test/include/esp32s3 -I/opt/esp/idf/components/ieee802154/include -I/opt/esp/idf/components/json/cJSON -I/opt/esp/idf/components/mqtt/esp-mqtt/include -I/opt/esp/idf/components/nvs_sec_provider/include -I/opt/esp/idf/components/perfmon/include -I/opt/esp/idf/components/spiffs/include -I/opt/esp/idf/components/touch_element/include -I/opt/esp/idf/components/usb/include -I/opt/esp/idf/components/wifi_provisioning/include -mlongcalls -fno-builtin-memcpy -fno-builtin-memset -fno-builtin-bzero -fno-builtin-stpcpy -fno-builtin-strncpy -fdiagnostics-color=always -ffunction-sections -fdata-sections -Wall -Werror=all -Wno-error=unused-function -Wno-error=unused-variable -Wno-error=unused-but-set-variable -Wno-error=deprecated-declarations -Wextra -Wno-unused-parameter -Wno-sign-compare -Wno-enum-conversion -gdwarf-4 -ggdb -Og -fno-shrink-wrap -fmacro-prefix-map=/home/wokwi/esp-project-esp32s3=. -fmacro-prefix-map=/opt/esp/idf=/IDF -fstrict-volatile-bitfields -fno-jump-tables -fno-tree-switch-conversion -std=gnu17 -Wno-old-style-declaration -MD -MT esp-idf/main/CMakeFiles/__idf_main.dir/src/main.c.obj -MF esp-idf/main/CMakeFiles/__idf_main.dir/src/main.c.obj.d -o esp-idf/main/CMakeFiles/__idf_main.dir/src/main.c.obj -c /home/wokwi/esp-project-esp32s3/main/src/main.c /home/wokwi/esp-project-esp32s3/main/src/main.c: In function 'ledc_init': /home/wokwi/esp-project-esp32s3/main/src/main.c:23:10: error: 'ledc_timer_config_t' has no member named 'timer_bit'; did you mean 'timer_num'? 23 | .timer_bit = LEDC_TIMER_10_BIT | ^~~~~~~~~ | timer_num /home/wokwi/esp-project-esp32s3/main/src/main.c:24:9: error: request for member 'freq_hz' in something not a structure or union 24 | .freq_hz = LEDC_FREQ, | ^ ninja: build stopped: subcommand failed. ninja failed with exit code 1, output of the command is in the /home/wokwi/esp-project-esp32s3/build/log/idf_py_stderr_output_10700 and /home/wokwi/esp-project-esp32s3/build/log/idf_py_stdout_output_10700 Error: Process exited with 2
最新发布
08-20
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值