Фактический вызов функции не имеет параметров, но моя программа отлично компилируется с любым количеством параметров [дубликаты]

Я новичок в мире программирования, и это мой первый пост, так что извините за многословие.

Недавно начал изучать C. Сегодня я нашел кое-что очень интересное в C, и мне было интересно, может ли кто-нибудь указать мне правильное направление или помочь мне понять, почему приведенный ниже код работает нормально. Я сделал несколько поисков, но не смог найти правильную причину или объяснение того, почему это происходит:

Например: я написал функцию с любым количеством параметров в вызове аргумента для моего вызова функции test_hello_world, у которого даже нет аргумента, моя программа не выдает никаких ошибок, кроме формы «неявного объявления предупреждения о функции».

Образец кода

—— Код—-

#include<stdio.h>

int main()
{
    test_hello_world(1, 2, 3, 4, 4, 5, 5);
    return 0;
}

int test_hello_world(){
    printf("Hello World! debug purpose \n");
    return 0;
} 

c
person AA_Float    schedule 20.11.2017    source источник
comment
С != С++. Отмечайте только тот язык, который вы используете, если только оба они не являются актуальными.   -  person tambre    schedule 20.11.2017
comment
Всегда компилируйте с включенными предупреждениями компилятора (например, минимум -Wall -Wextra для gcc или /W3 для cl.exe (VS)). Не принимайте код, пока он не скомпилируется без предупреждения. И укажите, просто ли вы компилируете объект или пытаетесь создать исполняемый файл. "warning: implicit declaration of function ‘test_hello_world’"   -  person David C. Rankin    schedule 20.11.2017
comment
Компиляция для C11 (текущий стандарт) или C99 (старый стандарт) вызовет все виды предупреждений о компиляции. Только компиляция для C90 (архаичный стандарт) позволяет компилировать этот код без предупреждений. Вы изучаете C в 21 веке; учитесь программировать в 21 веке C. То, что вы показываете, не 21 век C.   -  person Jonathan Leffler    schedule 20.11.2017
comment
@JonathanLeffler Я скомпилировал это с помощью -std=c11 -Wall -Wextra -pedantic, но не получил никаких дополнительных предупреждений, кроме неявного объявления   -  person klutt    schedule 20.11.2017
comment
@klutt: хорошо; «все виды» означает «неявное объявление». Если бы это был мой набор параметров компиляции по умолчанию, были бы жалобы и на определения, не являющиеся прототипами, и они были бы ошибками (-Werror -Wmissing-prototypes -Wstrict-prototypes и, возможно, несколько дополнений). Пространство перед новой строкой в ​​строке формата принесло бы мне недостатки, если бы я просмотрел его, но я не знаю опции компилятора, которая вызывала бы предупреждения об этом.   -  person Jonathan Leffler    schedule 20.11.2017
comment
@JonathanLeffler А, хорошо. Ваш комментарий подразумевал, что эта конкретная часть кода вызовет больше предупреждений с большим количеством флажков.   -  person klutt    schedule 20.11.2017
comment
Ага; Я преувеличил свой случай. Я все еще думаю, что тот факт, что он скомпилирован, указывает на ошибочное использование современных компиляторов или использование архаичных компиляторов (точнее, современных компиляторов, которые поддерживают только архаичные версии стандартного C, по крайней мере, по умолчанию). Но это полный рот.   -  person Jonathan Leffler    schedule 20.11.2017