<分区>
我目前正在编写一些加密算法,但遇到了一个我无法理解的 GCC 编译错误。这是问题所在:
在我的 int main(void)
函数中我得到了:
uint32_t block[2];
memset(block, 0x0, sizeof(block));
printf("%ld \n", sizeof(block));
这对于 GCC 来说看起来没问题。
然后,我将这个名为 block
的 uint32_t 数组传递给一个函数:
void readOneBlockFromFile(int fd, uint32_t block[2]){
if(fd == -1){
perror("fd");
errno = EIO;
exit(errno);
}
int nb_bytes_read = 0;
while(1){
memset(block, 0x0, sizeof(block));
nb_bytes_read = read(fd, block, sizeof(block));
if(nb_bytes_read == -1){
perror("read");
exit(errno);
}
if(nb_bytes_read == 0){
break; //EOF
}
}
}
在这里我收到了一些 GCC 警告:
SPN.c: In function ‘readOneBlockFromFile’:
SPN.c:46:30: warning: ‘sizeof’ on array function parameter ‘block’ will return size of ‘uint32_t * {aka unsigned int *}’ [-Wsizeof-array-argument]
memset(block, 0x0, sizeof(block));
^
SPN.c:38:44: note: declared here
void readOneBlockFromFile(int fd, uint32_t block[2]){
^~~~~
SPN.c:47:43: warning: ‘sizeof’ on array function parameter ‘block’ will return size of ‘uint32_t * {aka unsigned int *}’ [-Wsizeof-array-argument]
nb_bytes_read = read(fd, block, sizeof(block));
^
SPN.c:38:44: note: declared here
void readOneBlockFromFile(int fd, uint32_t block[2]){
^~~~~
因此,当我使用 block
而未使用 block[0]
或 *block
时,我的 GCC 会发出警告。
我不明白为什么 GCC 会为此发出警告,因为我可以在 main 中做同样的事情而不会出现任何问题。